Python: сортировки
Разберём «Python: сортировки» по шагам: короткая теория, наглядный пример, разбор типового задания и ловушки, на которых теряют баллы. В конце — что запомнить и где закрепить на практике.
Зачем нужны сортировки в Python
Когда список чисел, фамилий или результатов выглядит как случайная куча, найти нужное значение становится трудно. Сортировка помогает расположить элементы по возрастанию или убыванию, быстро увидеть минимум и максимум, сравнить результаты и подготовить данные к дальнейшим вычислениям. В этой статье ты разберёшь основные способы сортировки в Python, научишься выбирать подходящий метод и замечать типичные ошибки.
Самый простой вариант — встроенная функция sorted(). Она принимает последовательность и возвращает новый отсортированный список. Исходные данные при этом не меняются.
\( numbers = [7, 2, 9, 1] \)
\( result = sorted(numbers) \)
print(result)
[1, 2, 7, 9]
Если нужно изменить именно существующий список, используют метод sort(). Он ничего не возвращает, а перестраивает список на месте. Это различие часто проверяют в заданиях: sorted() создаёт результат, а sort() меняет объект.
Возрастание, убывание и параметр reverse
По умолчанию Python сортирует числа от меньшего к большему, то есть по возрастанию. Для обратного порядка добавляют аргумент reverse=True. Такой параметр можно применять и с sorted(), и с методом sort().
\( scores = [48, 72, 61, 90] \)
\( print(sorted(scores, reverse=True)) \)
[90, 72, 61, 48]
Важно не перепутать запись reverse=True с сортировкой по алфавиту в обратном порядке: это общий переключатель направления. Строки тоже сортируются, но сравниваются посимвольно. Поэтому заглавные и строчные буквы могут оказаться в неожиданном порядке.
Перед сортировкой уточни, что именно должно измениться: порядок элементов или сам список. Если исходные данные понадобятся ещё раз, выбирай sorted() и сохраняй результат в отдельную переменную.
В задачах ОГЭ и ЕГЭ полезно сначала выписать требуемый порядок словами: «от меньшего к большему» или «от большего к меньшему». После этого направление сортировки выбирается почти безошибочно.
Сортировка по ключу key
Иногда элементы нужно сравнивать не целиком, а по определённому признаку. Для этого у сортировки есть параметр key. В него передают функцию, которая получает элемент и возвращает значение для сравнения. Часто используют встроенные функции len или небольшую функцию lambda.
| Задача | Запись | Что сравнивается |
|---|---|---|
| По длине слов | sorted(words, key=len) | Количество символов |
| По модулю чисел | sorted(nums, key=abs) | Расстояние от нуля |
| По второму элементу пары | sorted(items, key=lambda x: x[1]) | Значение с индексом 1 |
words = ["дом", "машина", "кот"]
\( print(sorted(words, key=len)) \)
["дом", "кот", "машина"]
Функция key не меняет элементы, а только объясняет Python, по какому признаку их расположить. Это особенно удобно при работе с таблицами, словарями и списками пар.
Разобранный пример: результаты учеников
Представим список пар: имя ученика и его результат. Нужно вывести учеников от самого высокого результата к самому низкому. Сначала определяем, где находится балл: во втором элементе пары, то есть под индексом 1. Затем передаём в key функцию, возвращающую этот элемент, и включаем обратный порядок.
results = [("Ира", 72), ("Олег", 91), ("Маша", 84)]
\( ordered = sorted(results, key=lambda item: item[1], reverse=True) \)
print(ordered)
[("Олег", 91), ("Маша", 84), ("Ира", 72)]
Разберём ход выполнения. Python берёт каждую пару и вычисляет для неё ключ: для Иры это 72, для Олега 91, для Маши 84. Затем сравнивает ключи и располагает пары по убыванию. При этом каждая пара сохраняется целиком: имя не отделяется от результата.
Если требуется обычный порядок по баллам, достаточно убрать reverse=True. Если нужно сортировать по имени, ключом будет item[0]. Такая схема универсальна: сначала найди нужное поле, затем укажи его индекс в функции-ключе.
Бесплатно потренироваться на похожих задачах можно в личном кабинете: после регистрации удобно сразу проверить, как работает key.
Типичные ошибки и устойчивость сортировки
Первая ошибка — ожидать, что sort() вернёт новый список. На самом деле результатом будет None, потому что список уже изменён внутри.
\( a = [3, 1, 2] \)
\( b = a.sort() \)
print(b)
None
Вторая ошибка — сортировать числа как строки. Например, в текстовом порядке значение "10" может оказаться раньше "2", потому что сравнение начинается с первого символа. Если данные прочитаны через input(), преобразуй их в числа с помощью int() или float().
Не пиши sorted(numbers, reverse="True"). Здесь передана строка, а нужен логический параметр True без кавычек.
Сортировка в Python устойчива: элементы с одинаковым ключом сохраняют исходный взаимный порядок. Это удобно, когда нужно выполнять несколько последовательных сортировок по разным признакам.
Если хочется закрепить различия между методами, реши несколько заданий в бесплатной практике и сравни вывод программы с ожидаемым результатом.
Что запомнить
Для получения нового отсортированного списка используй sorted(), а для изменения существующего — sort(). Аргумент reverse=True задаёт убывающий порядок. Параметр key позволяет сортировать объекты по выбранному признаку: длине, модулю, индексу или полю записи.
Перед написанием кода ответь на три вопроса: что является элементом списка, по какому признаку его сравнивать и в каком направлении нужен результат. Отдельно проверь, не являются ли числа строками, и не пытаешься ли сохранить результат метода sort().
Следующий шаг — зарегистрируйся и реши 5 заданий бесплатно в личном кабинете. После этого попробуй самостоятельно составить сортировку для списка пар и объяснить каждую часть записи.
Чем отличаются sorted() и sort()?
sorted() возвращает новый отсортированный список и сохраняет исходный. sort() изменяет исходный список на месте и возвращает None.
Как отсортировать список по убыванию?
Передай аргумент reverse=True: например, sorted(numbers, reverse=True).
Как отсортировать строки по длине?
Используй параметр ключа: sorted(words, key=len). Python сравнит длины строк.
Как закрепить тему после разбора?
Реши несколько задач с числами, строками и списками пар. Для каждой сначала словами определи признак сортировки, затем напиши код и проверь результат на небольшом примере.
Не оставляйте тему «прочитанной»
Понимание — половина дела. Вторая — практика с обратной связью: личный кабинет Просто Урок покажет, где вы ошибаетесь, и подтянет слабые места.