Python List sort(): Подробное руководство по сортировке списков
В этом учебнике вы узнаете, как использовать Python для сортировки списка с помощью метода sort()
. Умение работать со списками является необходимым навыком в Python, учитывая их распространенность. Поскольку списки являются упорядоченными и изменяемыми структурами данных, мы можем изменять их порядок. Метод list.sort()
позволяет вам делать именно это! Этот метод является ценным инструментом, позволяющим сортировать списки многими пользовательскими способами.
К концу этого урока вы узнаете:
Как использовать метод сортировки Python для сортировки списка
Как сортировать по возрастанию, убыванию и индивидуальному порядку
Как сортировать списки списков, списки кортежей и списки словарей
Оглавление
Синтаксис метода sort() для списка Python
Метод sort()
в Python сортирует элементы списка в заданном порядке, включая порядок по возрастанию или убыванию. Метод работает на месте, что означает, что измененный список не нуждается в переназначении для его модификации.
Давайте рассмотрим параметры функции:
# Параметры метода .sort()
list.sort(
key=None, # Функция, определяющая ключ сортировки (по умолчанию None)
reverse=False # Если True, сортировка происходит в обратном порядке (по умолчанию False)
)
Как вы можете видеть в блоке выше, метод имеет два параметра:
key=
определяет функцию с одним аргументом, которая используется для сравнения с другим элементом списка. По умолчанию параметр установлен вNone
, что означает, что элементы списка сортируются напрямую, без вычисления отдельного ключевого значения.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']
Мы видим, что это имеет ряд ключевых преимуществ:
Оно сокращает количество кода, который нам нужно написать
Мы упрощаем понимание функции сортировки, избегая необходимости переходить к другой строке кода.
В следующих разделах вы научитесь сортировать различные общие структуры списков, такие как списки списков, списки кортежей и списки словарей.
Сортировка списка списков 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. Затем вы узнали, как использовать метод для сортировки элементов списка в порядке возрастания, убывания и собственного порядка. После этого вы узнали, как сортировать списки списков, списки кортежей и списки словарей.
Дополнительные ресурсы
Чтобы узнать больше о смежных темах, ознакомьтесь с учебными пособиями ниже:
Python: сортировка строки (4 разных способа)
Python: сортировка словаря по значениям
Списки Python: полный обзор
Python: преобразование словаря в список кортежей (4 простых способа)
Last updated