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

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

Автор: Рамис | Статьи 04 октября 2021

В этой статье мы рассмотрим несколько способов сортировки списков в 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}]

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

Заключение

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

Комментарии

Markdown
Войти