Гид по технологиям

Сортировка списков в Python

4 min read Programming Обновлено 04 Dec 2025
Сортировка списков в Python: sort и sorted
Сортировка списков в Python: sort и sorted

Экран компьютера с фрагментами кода

Кратко: в Python есть два основных способа сортировки — метод списка list.sort() и функция built-in sorted(). list.sort() меняет исходный список на месте, sorted() возвращает новый отсортированный список. Оба принимают ключ (key) и флаг обратного порядка (reverse). Ниже — понятные примеры, подсказки по словарям, вложенным структурам, случаи, где сортировка не сработает, и практический чек‑лист.

Что делает сортировка и зачем она нужна

Сортировка упорядочивает элементы по возрастанию или убыванию. Это важно при подготовке данных для отображения пользователю, при агрегации, при объединении результатов из API или БД, а также при оптимизации поиска и фильтрации.

Важно: сортировка не заменяет нормализацию данных. Перед сортировкой убедитесь, что типы и формат значений одинаковы.

Как сортировать список в Python

Для сортировки списков используется метод list.sort(). Он изменяет список на месте и возвращает None.

Синтаксис:

list.sort(key=function, reverse=True/False)

Параметры:

  • key: функция, возвращающая значение, по которому сравниваются элементы (необязательный).
  • reverse: если True — порядок обратный (убывающий). По умолчанию False.

Пример базовой сортировки строк:

myList = ["C", "D", "B", "A", "F"]
myList.sort()
print(myList)
# Output: ['A', 'B', 'C', 'D', 'F']

Сортировка в обратном порядке:

myList = ["C", "D", "B", "A", "F"]
myList.sort(reverse=True)
print(myList)
# Output: ['F', 'D', 'C', 'B', 'A']

Сортировка по длине строк с использованием key-функции:

myList = ["MUO", "Python", "JavaScript", "Sort", "Sortlists"]

def sortLength(item):
    return len(item)

myList.sort(reverse=True, key=sortLength)
print(myList)
# Output: ['JavaScript', 'Sortlists', 'Python', 'Sort', 'MUO']

Совет: для простых ключей используйте lambda-функции.

Сортировка списка словарей

Списки словарей часто встречаются при работе с данными. Для сортировки передавайте key, который возвращает поле словаря.

Пример — сортировка задач по времени:

myArray = [
    {"Task": "Wash", "Time": 12.00},
    {"Task": "Football", "Time": 24.00},
    {"Task": "Sort", "Time": 17.00},
    {"Task": "Code", "Time": 15.00}
]

def sortByTime(item):
    return item["Time"]

myArray.sort(key=sortByTime)
print(myArray)

Результат упорядочивает элементы по значению поля Time по возрастанию. Чтобы сортировать по строковому полю Task, возвращайте item[“Task”]. Для компактности можно написать так:

myArray.sort(key=lambda x: x["Time"], reverse=True)
print(myArray)

Замечание: если некоторые словари не содержат ключа, key-функция должна корректно обрабатывать это (например, возвращать значение по умолчанию или исключать элемент).

См. также: Как работают массивы и списки в Python

Сортировка вложенных списков и кортежей

Если элементы списка — кортежи или вложенные структуры, key обычно возвращает элемент по индексу.

Пример: сортируем по третьему элементу каждого кортежа:

Alist = [(3, 19, 20), (2, 6, 0), (1, 8, 15), (7, 9, 3), (10, 19, 4)]

def sortByThirdIndex(a):
    return a[2]

Alist.sort(key=sortByThirdIndex)
print(Alist)
# Output: [(2, 6, 0), (7, 9, 3), (10, 19, 4), (1, 8, 15), (3, 19, 20)]

Аналог с lambda и функцией sorted, возвращающей новый список:

Alist = [(3, 19, 20), (2, 6, 0), (1, 8, 15), (7, 9, 3), (10, 19, 4)]
newList = sorted(Alist, key=lambda a: a[2])
print(newList)
# Output: [(2, 6, 0), (7, 9, 3), (10, 19, 4), (1, 8, 15), (3, 19, 20)]

Важно: множества (set) не индексируемы, поэтому подобная сортировка по индексу невозможна без преобразования в список.

sorted() против list.sort()

Функция sorted() возвращает новый отсортированный список, не меняя исходный объект. Поддерживает те же параметры key и reverse.

Синтаксис:

sorted(iterable, key=function, reverse=True/False)

Пример:

Alist = [(3, 19, 20), (2, 6, 0), (1, 8, 15), (7, 9, 3), (10, 19, 4)]

def getIndex(a):
    return a[2]

newList = sorted(Alist, key=getIndex)
print(newList)
# Output: [(2, 6, 0), (7, 9, 3), (10, 19, 4), (1, 8, 15), (3, 19, 20)]

Когда использовать что:

  • Используйте list.sort(), если хотите изменить список на месте и сэкономить память.
  • Используйте sorted(), если нужно сохранить исходный порядок и получить новый список.

Когда сортировка может не сработать

  • Разные типы в одном списке (например, числа и строки) приведут к ошибке или непредсказуемому порядку.
  • Присутствуют None или отсутствующие ключи в словарях — ключ-функция должна это учитывать.
  • Неиндексируемые структуры (set) требуют преобразования в list.
  • Для больших объёмов данных сортировка в памяти может быть неэффективной — рассматривайте внешнюю сортировку или потоковую обработку.

Альтернативные подходы

  • heapq.nsmallest/nlargest — ищет k наименьших/наибольших элементов без полной сортировки.
  • itertools.islice + sorted — для частичной выборки из потока.
  • Параллельная/внешняя сортировка для очень больших данных (внешний merge sort).
  • Pandas DataFrame.sort_values() — удобен при табличных данных.

Практический мини‑метод (шаги)

  1. Проверить типы элементов и нормализовать значения.
  2. Решить, нужно ли изменять исходный список (sort) или получать новый (sorted).
  3. Определить ключ сортировки (lambda или функция).
  4. Тестировать на граничных случаях: пустой список, повторяющиеся значения, отсутствующие ключи.
  5. Если данные большие — профилировать использование памяти и времени.

Контрольный список для ролей

Разработчик:

  • Нормализовать данные перед сортировкой.
  • Выбрать sort или sorted.
  • Обработать исключения для отсутствующих ключей.

Data Engineer:

  • Оценить объём данных и применимость внешней сортировки.
  • Рассмотреть частичную выборку через heapq.

QA / Тестировщик:

  • Проверить поведение на пустых и сильно повторяющихся наборах.
  • Проверить стабильность сортировки для равных ключей (Python использует стабильную сортировку).

Критерии приёмки

  • Функция возвращает корректный порядок для положительных и отрицательных тестов.
  • Исходные данные не изменяются, если это оговорено.
  • Нет необработанных исключений при отсутствии ключей.

Короткий глоссарий

  • key: функция, возвращающая значение, по которому сравниваются элементы.
  • reverse: булево значение, включающее обратный порядок.
  • стабильная сортировка: при равных ключах сохраняется исходный порядок элементов.

Итог

Сортировка в Python гибкая и мощная. Для большинства задач достаточно list.sort() или sorted() с ключом и опцией reverse. В продакшн‑коде всегда проверяйте типы, обрабатывайте отсутствующие значения и выбирайте метод в зависимости от требований по памяти и неизменности исходных данных.

См. также: Что такое set в Python и как его создать

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Отключение Program Compatibility Assistant в Windows
Windows

Отключение Program Compatibility Assistant в Windows

Сборка и публикация Docker в GHCR
DevOps

Сборка и публикация Docker в GHCR

Добавить пустые пробелы в Dock на Mac
macOS

Добавить пустые пробелы в Dock на Mac

Переадресация почты в WordPress.com
WordPress

Переадресация почты в WordPress.com

Быстрее печатать на Android
Советы

Быстрее печатать на Android

Fastboot‑драйверы в Windows 11 — установка и советы
Руководство

Fastboot‑драйверы в Windows 11 — установка и советы