В этой статье мы рассмотрим несколько способов сортировки списков в Python.
Python поставляется с двумя встроенными методами для сортировки sort
и sorted
, каждый метод подходит для разных задач, часто зависит от того, хотим ли мы отсортировать список на месте или вернуть новую версию отсортированного списка.
Примеры sort() и sorted()
Если мы хотим отсортировать список на месте, мы можем использовать метод sort()
следующим образом:
pets = ['Черепаха', 'Кот', 'Рыба', 'Собака']
pets.sort()
print(pets)
#['Кот', 'Рыба', 'Собака', 'Черепаха']
По умолчанию список отсортирован по возрастанию.
Обратите внимание, исходный список pets
изменяется после вызова метода сортировки. Если мы этого не хотим, мы можем использовать функцию sorted()
, чтобы вернуть новый отсортированный список, оставив исходный без изменений.
pets = ['Черепаха', 'Кот', 'Рыба', 'Собака']
new_pets = sorted(pets)
print(new_pets)
#['Кот', 'Рыба', 'Собака', 'Черепаха']
print(pets)
#['Черепаха', 'Кот', 'Рыба', 'Собака']
Параметр reverse=True
можно использовать для сортировки списка в порядке убывания:
pets = ['Черепаха', 'Кот', 'Рыба', 'Собака']
new_pets = sorted(pets, reverse=True)
print(new_pets)
#['Черепаха', 'Собака', 'Рыба', 'Кот']
pets.sort(reverse=True)
print(pets)
#['Черепаха', 'Собака', 'Рыба', 'Кот']
Однако может быть сценарии, в которых мы заходим отсортировать список на основе определенных критериев. Например, мы хотим отсортировать наш список домашних животных по длине каждой записи. В этом случае Python предлагает аргумент key
, который принимает определяемую пользователем функцию для указания критериев сортировки:
pets = ['Черепаха', 'Кот', 'Рыба', 'Собака']
def get_len(x):
return len(x)
new_pets = sorted(pets, key=get_len)
print(new_pets)
#['Кот', 'Рыба', 'Собака', 'Черепаха']
pets.sort(key=get_len)
print(pets)
#['Кот', 'Рыба', 'Собака', 'Черепаха']
Теперь рассмотрим чуть более сложный пример. У нас есть список состоящий из словарей, которые содержат данные о группе людей, и мы хотим отсортировать его по их возрасту в порядке убывания.
Для этого мы будем использовать аргументы key
и reverse
, а также lambda-функцию.
data = [{'name': 'Рамис', 'age': 28}, {'name': 'Артем', 'age': 5}, {'name': 'Вася', 'age': 19}, {'name': 'Андрей', 'age': 67}]
new_data = sorted(data, key=lambda x: x['age'], reverse=True)
print(new_data)
#[{'name': 'Андрей', 'age': 67}, {'name': 'Рамис', 'age': 28}, {'name': 'Вася', 'age': 19}, {'name': 'Артем', 'age': 5}]
data.sort(key=lambda x: x['age'], reverse=True)
print(data)
#[{'name': 'Андрей', 'age': 67}, {'name': 'Рамис', 'age': 28}, {'name': 'Вася', 'age': 19}, {'name': 'Артем', 'age': 5}]
Обратите внимание, список из группы людей был создан в произвольном порядке, а затем отсортировался от самого взрослого, к самому молодому.
Заключение
Использование функций сортировки и лямбда-выражений позволяет нам легко сортировать сложные структуры данных одной строкой кода.