← Все вопросы

Как отсортировать список по убыванию в Python?

Задан 16 месяцев назад738 просмотров1 ответ
7

Умею сортировать список по возрастанию через sorted(), но мне нужно наоборот — от большего к меньшему. Как отсортировать по убыванию и числа, и строки?

1 ответ

11
✓ Принятый ответ — помог автору

Добавьте к сортировке параметр 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 (управляет одним полем).

Ваш ответ

, чтобы ответить на вопрос.