В языке Python имеются два встроенных инструмента сортировки, которые действуют настолько быстро, что в большинстве случаев вам придется сильно попотеть, чтобы превзойти их. Чтобы воспользоваться методом sort списков для сортировки итерируемых объектов произвольных типов, для начала можно преобразовать их в списки, если это необходимо:
temp = list(sequence)
temp.sort()
…использовать элементы в temp…
Напротив, встроенная функция sorted может оперировать любыми итерируемыми объектами без необходимости преобразования в список и возвращает новый отсортированный список, благодаря чему ее можно использовать в самых разных контекстах. Поскольку она не изменяет исходный объект, вам также не придется беспокоиться по поводу возможных побочных эффектов, вызванных изменением оригинального списка:
for item in sorted(iterable): …использовать item…
Чтобы реализовать нестандартную сортировку, просто передайте именованный аргумент key встроенному инструменту сортировки — он должен не выполнять сравнение, а отображать значения в ключи сортировки, но результат получается такой же (например, смотрите упорядочивание по длине результатов поиска на графах выше):
>>> L = [{‘n‘:3}, {‘n‘:20}, {‘n‘:0}, {‘n‘:9}]
>>> L.sort(key=lambda x: x[‘n’])
>>> L
[{‘n’: 0}, {‘n’: 3}, {‘n’: 9}, {‘n’: 20}]
Оба инструмента сортировки принимают также логический флаг reverse, который обеспечивает сортировку по убыванию вместо сортировки по возрастанию — нет никакой необходимости переворачивать последовательность после сортировки. Базовая процедура сортировки в языке Python настолько хороша, что в документации к ней даже говорится, что она обладает «сверхъестественной производительностью» — весьма неплохо для сортировки.
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, II том, 2011