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

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

4 min read Python Обновлено 04 Jan 2026
Сортировка списков в Python — sort() и sorted()
Сортировка списков в Python — sort() и sorted()

Экран компьютера с блоками кода

Что такое сортировка списков в Python

Сортировка списка упорядочивает элементы по возрастанию или убыванию. В Python есть два основных инструмента:

  • list.sort() — метод списка, меняет список на месте (in‑place) и возвращает None;
  • sorted() — встроенная функция, возвращает новую отсортированную копию, оригинал не меняется.

Кратко: если нужно сохранить исходный список — используйте sorted(), если нужно снизить потребление памяти и менять список прямо — list.sort().

Основной синтаксис

Метод sort и функция sorted принимают одинаковые ключевые аргументы:

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

sorted(iterable, key=function, reverse=True/False)
  • key — функция, по значению которой сравниваются элементы (например, len или lambda);
  • reverse — булево значение: False (по умолчанию) для возрастания, True для убывания.

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

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)

Если нужно сортировать по какому‑то производному значению элемента, передайте функцию в 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:

myList.sort(key=lambda x: len(x), reverse=True)

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

Чтобы сортировать список словарей, используйте ключ, возвращающий значение по нужному ключу словаря.

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)

То же через lambda:

myArray.sort(key=lambda x: x["Time"])  # чище и компактнее

Чтобы сортировать по названию задачи, верните item[“Task”]. Для обратного порядка добавьте reverse=True.

Совет: для небольшого выигрыша в производительности используйте operator.itemgetter:

from operator import itemgetter
myArray.sort(key=itemgetter('Time'))

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

Если у вас список кортежей/списков и нужно сортировать по индексу, используйте 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():

newList = sorted(Alist, key=lambda a: a[2])
print(newList)

Важно: нельзя индексировать set — поэтому сортировать множества таким способом нельзя; сначала преобразуйте в список: list(myset).

sorted() — когда нужна копия

sorted() возвращает новую структуру, не трогая исходную:

Alist = [(3, 19, 20), (2, 6, 0), (1, 8, 15)]
newList = sorted(Alist, key=lambda a: a[2])
print(newList)
# Alist остаётся без изменений

Частые ошибки и когда сортировка не сработает

  • Попытка сравнить несопоставимые типы (например, int и str) в Python 3 приведёт к TypeError.
  • Сортировка множества напрямую невозможна — используйте list(myset).
  • Нестабильный источник ключей: если ключ даёт одинаковые значения, порядок между равными элементами сохраняется (Python использует стабильную сортировку), но если вы рассчитываете на другую логику — уточните key.
  • Локализация строк: для корректной сортировки слов с диакритикой используйте locale.strxfrm.

Пример использования locale для строк:

import locale
locale.setlocale(locale.LC_COLLATE, 'ru_RU.UTF-8')  # пример для Linux, на Windows локали отличаются
names.sort(key=locale.strxfrm)

Производительность и поведение

  • Python использует алгоритм Timsort — адаптивная сортировка со сложностью в среднем O(n log n). Алгоритм стабильный.
  • Для больших списков избегайте многократной пересортировки: лучше собрать критерии и сортировать один раз.
  • Для сложных сравнений можно использовать functools.cmp_to_key, но предпочтительнее привести элемент к ключу (key), это обычно быстрее и чище.

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

  • heapq.nsmallest / nlargest — чтобы получить лишь несколько наименьших/наибольших элементов без полной сортировки.
  • pandas.DataFrame.sort_values — для табличных наборов данных в аналитике.
  • sorted с ключом, который кеширует расчёт ключа вручную (decorate‑sort‑undecorate) — иногда полезно, если вычисление ключа дорогое.

Мини‑чек‑лист для разработчика

  • Нужно ли менять исходный список? Если нет — используйте sorted().
  • Правильно ли выбран key (len, lambda, itemgetter)?
  • Обработаны ли смешанные типы и None?
  • Нужно ли учитывать локаль для строк?
  • Используется ли reverse корректно вместо reversed() на уже отсортированном списке?

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

  • Функция/метод возвращает отсортированный список в ожидаемом порядке.
  • Оригинальный список остаётся нетронутым, если это требование (sorted()).
  • Для равных ключей порядок остаётся предсказуемым (стабильная сортировка).
  • Тесты покрывают граничные случаи: пустой список, список с одним элементом, смешанные типы, None.

Примеры тестов/кейсов приёма

  • Сортировка чисел: [3,1,2] → [1,2,3]
  • Сортировка строк: [“b”,”a”] → [“a”,”b”]
  • Сортировка по ключу: [{‘x’:2},{‘x’:1}] → по x → [{‘x’:1},{‘x’:2}]
  • Попытка сортировки смешанных типов должна давать ясную ошибку или предобработку.

Важно: избегайте «тихих» ловушек — всегда проверяйте, что key возвращает ожидаемые типы.

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

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

Роль‑ориентированные советы

  • Разработчику: используйте itemgetter и lambda для читаемого и быстрого кода; профилируйте вычисление ключа.
  • Аналитику: при работе с табличными данными используйте pandas для удобной сортировки и фильтрации.
  • Тестировщику: добавьте тесты на пустой ввод, None и смешанные типы.

Краткое резюме

Сортировка списков в Python проста, но требует внимания к типам данных и целям (изменить список на месте или получить новую копию). Используйте key и reverse для управления порядком, lambda и operator.itemgetter для читабельности и эффективности. Учтите локализацию при сортировке строк и обрабатывайте смешанные типы заранее.

См. также: как работают массивы и списки в Python; что такое set и как его создавать.

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

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

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство