Как отсортировать список по убыванию в Python?
Умею сортировать список по возрастанию через sorted(), но мне нужно наоборот — от большего к меньшему. Как отсортировать по убыванию и числа, и строки?
1 ответ
Добавьте к сортировке параметр reverse=True — он переворачивает порядок:
nums = [3, 1, 4, 1, 5, 9]
print(sorted(nums, reverse=True)) # [9, 5, 4, 3, 1, 1]
Работает и для строк (по алфавиту в обратную сторону), и вместе с key:
words = ['груша', 'яблоко', 'банан']
print(sorted(words, reverse=True)) # ['яблоко', 'груша', 'банан']
people = [{'age': 30}, {'age': 25}, {'age': 40}]
by_age_desc = sorted(people, key=lambda p: p['age'], reverse=True)
То же есть у метода .sort(), который сортирует список на месте:
nums.sort(reverse=True)
Для простых чисел есть альтернатива — отсортировать по возрастанию и перевернуть срезом [::-1]. Но reverse=True понятнее и работает корректнее при сортировке по нескольким ключам.
Хитрый трюк для смешанной сортировки (например, по одному полю по убыванию, по другому по возрастанию): для чисел можно сортировать по -значение:
sorted(people, key=lambda p: (-p['age'], p['name']))
Тут возраст идёт по убыванию (из-за минуса), а имя по возрастанию. Частая ошибка — путать reverse=True (меняет общий порядок) с минусом в key (управляет одним полем).