python Разница между обращенным (список) и list.sort (reverse = True) - PullRequest
21 голосов
/ 02 апреля 2012

В чем разница между

mylist = reversed(sorted(mylist))

против

mylist = sorted(mylist, reverse=True)

Почему один будет использоваться поверх другого?

Как насчет стабильной сортировки по несколькимстолбцы типа

mylist.sort(key=itemgetter(1))
mylist.sort(key=itemgetter(0))
mylist.reverse()

это то же самое, что

mylist.sort(key=itemgetter(1), reverse=True)
mylist.sort(key=itemgetter(0), reverse=True)

?

Ответы [ 3 ]

20 голосов
/ 02 апреля 2012

Вы нажали точно разницу. Поскольку Timsort является стабильным, сортировка по обратному или обратному порядку сортировки оставляет элементы несортированные в обратном порядке.

>>> s = ((2, 3, 4), (1, 2, 3), (1, 2, 2))
>>> sorted(s, key=operator.itemgetter(0, 1), reverse=True)
[(2, 3, 4), (1, 2, 3), (1, 2, 2)]
>>> list(reversed(sorted(s, key=operator.itemgetter(0, 1))))
[(2, 3, 4), (1, 2, 2), (1, 2, 3)]
2 голосов
/ 26 марта 2017

Вы получаете список для sorted(), но reversed() возвращает итератор

1 голос
/ 26 марта 2017

Интересный инвариант: list(reversed(sorted(reversed(data)))) == sorted(data, reverse=True).

Другие респонденты правы в том, что разница связана со стабильностью сортировки, которая сохраняет порядок равных ключей. А также sorted () возвращает список, а reversed () возвращает итератор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...