Python Разница между отмененными (список) и list.sort(reverse = True)
В чем разница между
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)
?
Ответы
Ответ 1
Вы попали именно в эту разницу. Поскольку 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
Интересный инвариант: list(reversed(sorted(reversed(data)))) == sorted(data, reverse=True)
.
Другие респонденты верны, что разница имеет отношение к стабильности сортировки, которая сохраняет порядок равных ключей. А также отсортированный() возвращающий список при обратном() возвращает итератор.
Ответ 3
Вы получаете список для sorted(). но reverseed() возвращает итератор