Python List sort(): Подробное руководство по сортировке списков

В этом учебнике вы узнаете, как использовать Python для сортировки списка с помощью метода sort(). Умение работать со списками является необходимым навыком в Python, учитывая их распространенность. Поскольку списки являются упорядоченными и изменяемыми структурами данных, мы можем изменять их порядок. Метод list.sort() позволяет вам делать именно это! Этот метод является ценным инструментом, позволяющим сортировать списки многими пользовательскими способами.

К концу этого урока вы узнаете:

  • Как использовать метод сортировки Python для сортировки списка

  • Как сортировать по возрастанию, убыванию и индивидуальному порядку

  • Как сортировать списки списков, списки кортежей и списки словарей

Оглавление

Синтаксис метода sort() для списка Python

Метод sort() в Python сортирует элементы списка в заданном порядке, включая порядок по возрастанию или убыванию. Метод работает на месте, что означает, что измененный список не нуждается в переназначении для его модификации.

Давайте рассмотрим параметры функции:

# Параметры метода .sort()
list.sort(
    key=None,  # Функция, определяющая ключ сортировки (по умолчанию None)
    reverse=False  # Если True, сортировка происходит в обратном порядке (по умолчанию False)
)

Как вы можете видеть в блоке выше, метод имеет два параметра:

  1. key= определяет функцию с одним аргументом, которая используется для сравнения с другим элементом списка. По умолчанию параметр установлен в None, что означает, что элементы списка сортируются напрямую, без вычисления отдельного ключевого значения.

  2. reverse= определяет порядок сортировки значений. По умолчанию аргумент установлен как False, что означает сортировку данных в порядке возрастания.

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

В следующих разделах вы научитесь использовать метод .sort() для сортировки значений в списке. Сначала вы узнаете, как сортировать список по возрастанию.

Сортировка списка в Python по возрастанию

В этом разделе вы узнаете, как отсортировать список в порядке возрастания, используя метод .sort(). По умолчанию метод будет использовать аргумент reverse=False, что означает, что элементы будут отсортированы по возрастанию. Из-за этого мы можем пропустить ввод этого параметра.

Давайте рассмотрим пример того, как отсортировать список в порядке возрастания на Python:

# Сортировка списка в порядке возрастания
name = ['d', 'a', 't', 'a', 'g', 'y']
name.sort()  # Сортирует список name в порядке возрастания
print(name)  # Выводит отсортированный список

# Возвращает:
# ['a', 'a', 'd', 'g', 't', 'y']

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

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

В следующем разделе вы узнаете, как отсортировать список в порядке убывания, используя метод .sort() в Python.

Сортировка списка в Python по убыванию

Так же, как мы можем сортировать список по возрастанию, мы можем сортировать список в Python по убыванию, используя метод .sort(). Хотя функция по умолчанию будет сортировать список по возрастанию, мы можем изменить это поведение, установив параметр reverse= в значение True

Давайте посмотрим, как мы можем отсортировать список в обратном порядке, используя метод .sort()

# Сортировка списка в порядке убывания
name = ['d', 'a', 't', 'a', 'g', 'y']
name.sort(reverse=True)  # Сортирует список name в порядке убывания
print(name)  # Выводит отсортированный список

# Возвращает:
# ['y', 't', 'g', 'd', 'a', 'a']

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

Сортировка списка в Python в пользовательском порядке с использованием ключа

Метод .sort() в Python позволяет более тонко настраивать порядок сортировки элементов с использованием параметра key=. Давайте рассмотрим пример, на который я уже делал намек в двух предыдущих разделах: как обрабатываются заглавные буквы.

Давайте изменим одну букву на заглавную в списке и посмотрим, как это изменит порядок сортировки:

# Порядок сортировки с учетом заглавных букв
name = ['D', 'a', 't', 'a', 'g', 'y']
name.sort()  # Сортирует список name в порядке возрастания
print(name)  # Выводит отсортированный список

# Возвращает:
# ['D', 'a', 'a', 'g', 't', 'y']

Мы видим, что заглавная буква 'D' сортируется перед строчными буквами. Это связано с тем, что значения сортируются по их значениям ASCII, где заглавные буквы имеют значения меньше, чем их строчные версии.

Это место, где параметр key= играет ключевую роль! Мы можем передать в него ключ, который принимает функцию для изменения порядка сортировки. Например, если мы хотим сравнивать все буквы без учета регистра, мы можем передать вызываемый объект str.lower

Давайте посмотрим, как это выглядит:

# Сортировка списка букв с различным использованием заглавных букв
name = ['D', 'a', 't', 'a', 'g', 'y']
name.sort(key=str.lower)  # Сортирует список name с игнорированием регистра
print(name)  # Выводит отсортированный список

# Возвращает:
# ['a', 'a', 'D', 'g', 't', 'y']

Мы можем пойти еще дальше, передав в функцию пользовательскую функцию! Предположим, мы хотели бы отсортировать список строк по последней букве, сначала мы можем создать функцию, которая возвращает последнюю букву каждого элемента, переданного в неё.

Давайте рассмотрим пример, как мы можем это сделать:

# Сортировка списка с помощью пользовательской функции
words = ['apple', 'banana', 'grapefruit', 'plum']

def get_last(word):
    return word[-1]

words.sort(key=get_last)  # Сортирует список words по последней букве каждого слова
print(words)  # Выводит отсортированный список

# Возвращает:
# ['banana', 'apple', 'plum', 'grapefruit']

В следующем разделе вы узнаете, как использовать анонимную лямбда-функцию для определения пользовательского порядка сортировки.

Сортировка списка в Python по пользовательскому порядку с использованием Lambda функций

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

# Сортировка списка с использованием лямбда-функции
words = ['apple', 'banana', 'grapefruit', 'plum']

words.sort(key=lambda x: x[-1])  # Сортирует список words по последней букве каждого слова
print(words)  # Выводит отсортированный список

# Возвращает:
# ['banana', 'apple', 'plum', 'grapefruit']

Мы видим, что это имеет ряд ключевых преимуществ:

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

  2. Мы упрощаем понимание функции сортировки, избегая необходимости переходить к другой строке кода.

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

Сортировка списка списков Python

В этом разделе вы научитесь сортировать список списков в Python, используя метод .sort(). В этом примере мы будем сортировать список списков по их длине по возрастанию (от самого короткого к самому длинному).

Снова, мы можем сделать это, используя параметр key= и передавая в него вызываемый объект len. Это позволит сортировать по возвращаемому значению функции len(), по возрастанию:

# Сортировка списка списков по их длине
lists = [[1, 2, 3], [4, 5], [6], [7, 8, 9, 10]]
lists.sort(key=len)  # Сортирует список lists по длине каждого вложенного списка
print(lists)  # Выводит отсортированный список

# Возвращает:
# [[6], [4, 5], [1, 2, 3], [7, 8, 9, 10]]

Здесь видно, что каждый список отсортирован по его длине, так что более короткие подсписки расположены перед более длинными.

Сортировка списка кортежей в Python

Сортировка списка кортежей в Python аналогична сортировке списка списков. В связи с этим, давайте рассмотрим пример, который показывает, как сортировать, используя другой ключ.

Например, представим, что у нас есть кортеж, который содержит (country, number_of_medals), мы можем отсортировать наш список стран по убыванию количества медалей. Давайте посмотрим, как мы можем это сделать:

# Сортировка списка кортежей
countries = [('Spain', 10), ('Portugal', 3), ('Italy', 5), ('Germany', 23), ('France', 12)]
countries.sort(key=lambda x: x[1], reverse=True)  # Сортирует список countries по второму элементу каждого кортежа в обратном порядке
print(countries)  # Выводит отсортированный список

# Возвращает:
# [('Germany', 23), ('France', 12), ('Spain', 10), ('Italy', 5), ('Portugal', 3)]

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

Сортировка списка словарей в Python

В этом последнем разделе мы рассмотрим, как отсортировать список словарей. Поскольку словари состоят из пар key:value, к элементам нельзя обратиться по их индексу. Представьте, что у нас есть следующий словарь:

# Список словарей, содержащих информацию о людях
people = [
    {'Name': 'Nik', 'Age': '33', 'City': 'London'}, 
    {'Name': 'Kate', 'Age': '32', 'City': 'Paris'}, 
    {'Name': 'Mike', 'Age': '23', 'City': 'Berlin'}]

Если мы хотим отсортировать список людей по их возрасту в порядке возрастания, нам нужно получить доступ к значению по ключу 'Age'. Сделать это можно, используя метод .get()

Мы можем передать метод .get() в лямбда-функцию и получить доступ к ключу 'Name'

# Сортировка списка словарей по значению
people = [
    {'Name': 'Nik', 'Age': '33', 'City': 'London'}, 
    {'Name': 'Kate', 'Age': '32', 'City': 'Paris'}, 
    {'Name': 'Mike', 'Age': '23', 'City': 'Berlin'}]

people.sort(key=lambda x: x.get('Name'))  # Сортирует список people по значению ключа 'Name' в каждом словаре
print(people)  # Выводит отсортированный список

# Возвращает:
# [{'Name': 'Kate', 'Age': '32', 'City': 'Paris'}, 
# {'Name': 'Mike', 'Age': '23', 'City': 'Berlin'}, 
# {'Name': 'Nik', 'Age': '33', 'City': 'London'}]

Заключение

В этом посте вы узнали, как использовать Python для сортировки списков с помощью метода .sort(). Вы узнали, как работает синтаксис метода сортировки Python. Затем вы узнали, как использовать метод для сортировки элементов списка в порядке возрастания, убывания и собственного порядка. После этого вы узнали, как сортировать списки списков, списки кортежей и списки словарей.

Дополнительные ресурсы

Чтобы узнать больше о смежных темах, ознакомьтесь с учебными пособиями ниже:

Last updated