Рубрики
Без рубрики

Сортировка списка Python с помощью sorted() и sort()

Автор оригинала: Jacob Stopak.

В этой статье мы рассмотрим несколько способов сортировки списков в Python.

Python поставляется с двумя встроенными методами сортировки списков и других итерационных объектов. Метод, выбранный для конкретного случая использования, часто зависит от того, хотим ли мы отсортировать список на месте или вернуть новую версию отсортированного списка.

Предполагая, что мы хотим отсортировать список на месте, мы можем использовать метод list.sort() следующим образом:

>>> pets = ['Turtle', 'Cat', 'Fish', 'Dingo']
>>> pets.sort()
>>> pets
['Cat', 'Dingo', 'Fish', 'Turtle']

По умолчанию список отсортирован в порядке возрастания. Обратите внимание, как изменяется исходный список домашних животных после вызова метода сортировки. Если мы не хотим, чтобы это произошло, мы можем использовать встроенную функцию sorted() для возврата нового отсортированного списка, оставляя исходный список неизменным:

>>> pets = ['Turtle', 'Cat', 'Fish', 'Dingo']
>>> new_pets = sorted(pets)
>>> new_pets
['Cat', 'Dingo', 'Fish', 'Turtle']
>>> pets
['Turtle', 'Cat', 'Fish', 'Dingo']

Обратный аргумент можно использовать для сортировки списков в порядке убывания:

>>> pets = ['Turtle', 'Cat', 'Fish', 'Dingo']
>>> new_pets = sorted(pets, reverse=True)
>>> new_pets
['Turtle', 'Fish', 'Dingo', 'Cat']
>>> pets.sort(reverse=True)
>>> pets
['Turtle', 'Fish', 'Dingo', 'Cat']

Однако существуют сценарии, в которых мы можем захотеть отсортировать список на основе пользовательских критериев, которые мы определяем. Например, мы можем отсортировать список домашних животных по длине каждой записи. В этом случае Python предлагает ключевой аргумент, который принимает пользовательскую функцию для указания критериев сортировки:

>>> pets = ['Turtle', 'Cat', 'Fish', 'Dingo']
>>> get_len(x):
...    return len(x)
...
>>> new_pets = sorted(pets, key=get_len)
>>> new_pets
['Cat', 'Fish', 'Dingo', 'Turtle']
>>> pets.sort(key=get_len)
>>> pets
['Cat', 'Fish', 'Dingo', 'Turtle']

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

>>> data = [ { 'name': 'Billy', 'age': 26, 'country': 'USA' }, { 'name': 'Timmy', 'age': 5, 'country': 'Australia' }, { 'name': 'Sally', 'age': 19, 'country': 'Costa Rica' }, { 'name': 'Tommy', 'age': 67, 'country': 'Serbia' } ]
>>> new_data = sorted(data, key=lambda x: x['age'], reverse=True)
>>> new_data
[{'country': 'Serbia', 'age': 67, 'name': 'Tommy'}, {'country': 'USA', 'age': 26, 'name': 'Billy'}, {'country': 'Costa Rica', 'age': 19, 'name': 'Sally'}, {'country': 'Australia', 'age': 5, 'name': 'Timmy'}]
>>> data.sort(key=lambda x: x['age'], reverse=True)
>>> data
[{'country': 'Serbia', 'age': 67, 'name': 'Tommy'}, {'country': 'USA', 'age': 26, 'name': 'Billy'}, {'country': 'Costa Rica', 'age': 19, 'name': 'Sally'}, {'country': 'Australia', 'age': 5, 'name': 'Timmy'}]

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

Использование функций сортировки и лямбд таким образом позволяет нам легко сортировать сложные структуры данных, все в одной строке кода. А порядок сортировки можно установить в порядке убывания, установив reverse=True .

Об авторе

Эта статья была написана Джейкобом Стопаком, консультантом по программному обеспечению и разработчиком, страстно желавшим помочь другим улучшить свою жизнь с помощью кода. Джейкоб является создателем Code Card – удобного инструмента для разработчиков для поиска, копирования и вставки общих фрагментов кода.