ЯдроКодаподготовка к экзаменам
Учебная платформа

Загружаем материалы

Подготавливаем материалы и навигацию по разделу.

Сортировка списка в Python: sort и sorted

Автор: · Обновлено

Метод list.sort изменяет исходный список и возвращает None. Функция sorted принимает любую перебираемую последовательность и создаёт новый список, оставляя источник без изменений. Выбор зависит от того, нужна ли прежняя последовательность.

Два результата рядом

scores = [72, 95, 68, 95]
ascending = sorted(scores)
descending = sorted(scores, reverse=True)

print(scores)
print(ascending)
print(descending)

Вывод:

[72, 95, 68, 95]
[68, 72, 95, 95]
[95, 95, 72, 68]

Повторы сохраняются. Исходный scores не изменён, потому что использована sorted.

Ключ сортировки

Параметр key задаёт значение для сравнения. sorted(words, key=len) упорядочит слова по длине, но вернёт сами слова. Для строк без учёта регистра подходит key=str.lower. Алгоритм сортировки стабилен: элементы с одинаковым ключом сохраняют взаимный порядок.

Типичная ошибка values = values.sort(): после неё values станет None. Вызов sort нужен отдельной строкой. Смешанные несравнимые типы, например числа и строки, вызывают TypeError. Сортировка числовых строк лексикографически ставит '10' раньше '2'; сначала преобразуйте их в int.

Рейтинг без потери исходника

Для списка результатов [14, 7, 21, 14] создайте убывающую копию и выведите три лучших значения. Убедитесь, что исходный список прежний. Затем отсортируйте слова ['Груша', 'яблоко', 'Мак'] по длине и отдельно — по алфавиту без учёта регистра. Предскажите порядок до запуска и объясните роль key в каждом варианте.

Сортировка как отдельное решение

Возьмите список слов с разным регистром и одинаковой длиной. Создайте три результата: обычный лексикографический порядок, порядок без учёта регистра и порядок по паре «длина, нижний регистр». Не меняйте исходный список, чтобы сравнить варианты рядом. Затем используйте sort на копии и проверьте возвращаемое значение метода. Зафиксируйте правило для равных ключей: стабильность сохраняет прежний взаимный порядок. Это позволяет делать многоступенчатую сортировку, но ключ-кортеж обычно яснее. Подберите тест, где разные стратегии действительно дают разные результаты.

Практикум: сортировка без потери исходного порядка

Есть список результатов в порядке финиша. Получите таблицу по возрастанию баллов, сохранив исходный порядок для отчёта. Сравните sorted(results) и results.sort() по возвращаемому значению и изменению объекта. Проверьте повторы и сортировку пар (score, name) по выбранному ключу. Для равных баллов сформулируйте правило и исследуйте стабильность сортировки. Создайте тест, который после операции сравнивает исходный список с заранее сохранённым ожидаемым порядком.

Контрольная точка

Почему присваивание ordered = results.sort() даёт None? Объясните контракт метода, изменяющего список на месте, и функции, возвращающей новую коллекцию.

Частые вопросы

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

У sorted и list.sort есть параметр reverse=True. Для сложного объекта задают key. Отрицание числового ключа иногда работает, но явный параметр лучше передаёт намерение.

Источники