Python. Сортировка

Python содержит несколько различных способов сортировки данных. Встроенный метод списков list.sort() изменяет вызвавший его список. Встроенная функция sorted() создаёт новый сортированный список из итерируемого объекта.

Простая сортировка

Чтобы отсортировать список по возрастанию вызовите функцию sorted(). Функция вернёт новый сортированный список:

Метод list.sort() сортирует список у которого вызван и возвращает None. Если исходный список больше не нужен это может быть немного эффективнее:

Метод list.sort() определён только для списков. В отличи от него, функция sorted() работает с любыми перечисляемыми объектами:

Параметр key

Функций list.sort() и sorted() содержат параметр key чтобы указать функцию вызываемую для каждого аргумента перед сравнением.

Пример регистронезависимого сравнения:

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

Общий шаблон для отсортировки сложных объектов — использование одного из индексов как ключа:

Тот же способ работает для объектов с именованными атрибутам:

Функции из модуля operator

Шаблон с ключевой функций, показанный выше, используется очень часто, поэтому Python предоставляет функции для быстрого создания функций доступа. Модуль operator содержит функции: itemgetter(), attrgetter(), и methodcaller().

Используя эти функции, примеры выше становятся проще и быстрее:

Функции модуля operator позволяют несколько уровней сортировки. Для примера, сортировка по классу и по возрасту:

Порядок сортировки

Функции list.sort() и sorted() имеют Параметр reverse определяет направление сортировки. При значении True сортировка происходит в обратном порядке:

Стабильность и сложность сортировки

Сортировка гарантировано стабильная. Когда несколько записей имеют одинаковый ключ их порядок всегда сохраняется.

Заметьте что две записи с blue сохраняют исходный порядок, так что ('blue', 1) гарантировано впереди ('blue', 2).

Стабильность сортировки позволяет выполнять сложную сортировку по шагам. Например, для сортировки учеников по классу в возрастающем порядке и затем по возрасту в убывающем порядке. Сначала сортируем по возрасту и затем по классу:

Эту возможность можно абстрагировать и обернуть в функцию которая принимает список и кортежи из полей и порядка сортировки:

Алгоритм Timsort, используемый в Python, эффективно производит множественные сортировки, так как использует существующий порядок в данных.

Ссылки

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *