Мы уже говорили о сортировке словарей Python в одной из статей. Сегодня поговорим о сортировке списков. В этой статье разберемся с методом sort: какие параметры принимает, что определяет key
, как сортировать списки списков, кортежей, словарей.
Синтаксис sort
ML Практикум: от теории к промышленному использованию
Код курса
PYML
Ближайшая дата курса
26 мая, 2025
Продолжительность
24 ак.часов
Стоимость обучения
54 000 руб.
Метод sort
сортирует элементы списка в возрастающем или убывающем порядке. Работает метод “на месте”, что значит изменяется исходный список, а не возвращается новый. Синтаксис у метода следующий:
list.sort(key=None, reverse=False)
По умолчанию сортировка происходит в возрастающем порядке. У метода два параметра:
key
определяет, как именно нужно сортировать через функцию с одним параметром. Этот параметр стоит рассматривать, как элемент списка.reverse
определяет по возрастанию или убыванию сортировать. По умолчанию по возрастанию (False
);
Помимо метода sort
в Python есть встроенная функция sorted
, которая принимает три параметра, где первым является сама итерируемая последовательность, а остальные два — те же самые, что и выше. Различие заключается в том, что sorted
не изменяет исходный список, а возвращает сортированный.
Сортировка списка в порядке возрастания и убывания
По умолчанию список сортируется в порядке возрастания reverse=False
, поэтому все что требуется, так это вызвать метод sort
. Пример кода на Python для сортировки списка в порядке возрастания:
>>> l = ['a', 'c', 'G', 'y', '0'] >>> l.sort() >>> l ['0', 'G', 'a', 'c', 'y']
Строки сортируются согласно порядку ASCII (дайте команду man ascii
, чтобы ознакомиться с таблицей).
С другой стороны, для сортировки по убыванию, требуется указать reverse=False
:
>>> l = ['a', 'c', '0', 'y', 'G'] >>> l.sort() >>> l ['y', 'c', 'a', 'G', '0']
Ключ к ключу key
Как уже было сказано, строки сортируются согласно ASCII. А что если нас не волнует с прописной или строчной начинается строка? Мы знаем, что поведение сортировки можно изменить через key
. Например, для каждого элемент снизить (или повысить) регистр на нижний. Это сделать можно так:
>>> l = ['a', 'c', 'G', 'y', 'v'] >>> l.sort() >>> l ['a', 'c', 'G', 'v', 'y']
А что если мы хотим сортировать по последнему символу? Мы можем определить свою функцию, которая будет брать последний символ:
>>> words = ['apple', 'banana', 'grapefruit', 'plum'] >>> >>> def get_last(word): ... return word[-1] ... >>> words.sort(key=get_last) >>> words ['banana', 'apple', 'plum', 'grapefruit']
На этих двух примерах видно, что значение у параметра key
— двоякое. Во-первых, он может модифицировать элементы списка, а в-вторых, он может выступать как геттер объекта. Причем и то, и другое должны быть функциями (или методами). Причем мы могли бы сделать, чтобы элемент модифицировался и был выбран последний символ:
>>> words = ['APPLE', 'banana', 'grapefruit', 'PLUM'] >>> words.sort(key=get_last) >>> words ['APPLE', 'PLUM', 'banana', 'grapefruit'] >>> def last_lower(word): ... return word.lower()[-1] ... >>> words = ['APPLE', 'banana', 'grapefruit', 'PLUM'] >>> words.sort(key=get_last) ['banana', 'APPLE', 'PLUM', 'grapefruit']
Лямбда-функция в качестве key
Мы уже как-то говорили о лямбда-функциях тут. Это анонимные функции. Если ваша функция состоит из одной строки, то ее можно заменить лямбда-функцией:
>>> words = ['apple', 'banana', 'grapefruit', 'plum'] >>> words = ['apple', 'banana', 'grapefruit', 'plum'] >>> words.sort(key=lambda x: x[-1]) ['banana', 'apple', 'plum', 'grapefruit'] >>> words = ['APPLE', 'banana', 'grapefruit', 'PLUM'] >>> words.sort(key=lambda x: x.lower()[-1]) >>> words ['banana', 'APPLE', 'PLUM', 'grapefruit']
Как сортировать список списков
Если у вас есть список, который содержит другие списки, и вам нужно его сортировать согласно их размеру, тогда сделать это можно следующим кодом на Python:
>>> ls = [[1, 3, 2], [4, 5], [6], [8, 9, 10, 7]] >>> ls.sort(key=len) [[6], [4, 5], [1, 2, 3], [7, 8, 9, 10]]
Функция len
можно применить и к строкам, тогда сортировка будет осуществлять согласно длине строки.
Благодаря возможности сортировки на месте можно сортировать и сами вложенные списки:
>>> ls = [[1, 3, 2], [4, 5], [6], [8, 9, 10, 7]] >>> for l in ls: ... l.sort() ... >>> ls [[1, 3, 2], [4, 5], [6], [8, 9, 10, 7]]
Как сортировать список кортежей
Очень часто встречается ситуация, когда нужно сортировать список, который содержит кортежи. Например, он получился через метод словаря items
. Тогда возникает вопрос, сортировать по ключу или значению? Для кортежей это значит — по первому элементу или второму (или в случае большого количества по последнему).
Тогда сортировать список кортежей можно, написав следующий код на Python:
>>> countries = [('Spain', 10), ('Portugal', 3), ('Italy', 5)] >>> countries.sort(key=lambda x: x[1], reverse=True) >>> countries [('Spain', 10), ('Italy', 5), ('Portugal', 3)]
Как сортировать список словарей
У нас в коде может оказаться список словарей. И нужно сортировать по одному из ключей. Тогда это можно сделать через метод словаря — get
.
>>> 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': 'Kate', 'Age': '32', 'City': 'Paris'}, {'Name': 'Mike', 'Age': '23', 'City': 'Berlin'}, {'Name': 'Nik', 'Age': '33', 'City': 'London'}]
О том, как применять различные алгоритмы на языке Python на реальных примерах Data Science вы узнаете на курсах в лицензированном учебном центре обучения и повышения квалификации разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве.