В этой статье мы рассмотрим несколько способов сортировки списков в 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 - удобного инструмента для разработчиков, позволяющего искать, копировать и вставлять общие фрагменты кода.