Python: сортировка списков методом .sort() с ключом — простыми словами
Поводом опубликовать пост стало то, что при детальном изучении списков (массивов) в Python я не смог найти в сети ни одного простого описания метода сортировки элементов с использованием ключа: list.sort(key=. ).
Может быть, конечно, это мне так не повезло и я долго понимаю простые для всех вещи, однако я думаю, что приведенная ниже информация будет весьма полезна таким же начинающим питонистам, как и я сам.
Итак, что мы имеем. Предположим, у нас есть список, который мы бы хотели отсортировать — и состоит он из трех строк разной длины в определенной последовательности:
sortList = [‘a’, ‘сс’, ‘bbb’]
Сортировка элементов массива методом .sort() производится по умолчанию лексикографически — проще говоря, в алфавитном порядке, а также от меньшего значения к большему. Поэтому если мы выполним:
то получим на выходе:
Однако метод .sort() позволяет нам изменять и принцип, и порядок сортировки.
Для изменения принципа сортировки используется ключевое слово key, которое стало доступным начиная с версии Python 2.4.
Предположим, нам хотелось бы отсортировать наш список двумя способами: 1. в алфавитном порядке; 2. по длине строки. Первый способ, впрочем, уже работает как сортировка по умолчанию, однако мы можем добиться таких же результатов и с помощью параметра key:
sortList = [‘a’, ‘cc’, ‘bbb’]
# Создаем "внешнюю" функцию, которая будет сортировать список в алфавитном порядке:
def sortByAlphabet(inputStr):
return inputStr[0] # Ключом является первый символ в каждой строке, сортируем по нему
# Вторая функция, сортирующая список по длине строки:
def sortByLength(inputStr):
return len(inputStr) # Ключом является длина каждой строки, сортируем по длине
print u’Исходный список: ‘, sortList # >>> [‘a’, ‘cc’, ‘bbb’]
sortList.sort(key=sortByAlphabet) # Каждый элемент массива передается в качестве параметра функции
print u’Отсортировано в алфавитном порядке: ‘, sortList # >>> [‘a’, ‘bbb’, ‘cc’]
sortList.sort(key=sortByLength) # Каждый элемент массива передается в качестве параметра функции
print u’Отсортировано по длине строки: ‘, sortList # >>> [‘a’, ‘cc’, ‘bbb’]
# Теперь отсортируем по длине строки, но в обратном порядке:
sortList.sort(key=sortByLength, reverse=True) # В обратном порядке
print u’Отсортировано по длине строки, в обратном порядке: ‘, sortList # >>> [‘bbb’, ‘cc’, ‘a’]
Обратите внимание, что метод .sort() производит действия с исходным списком, переставляя элементы внутри него самого, и НЕ возвращает отсортированную копию исходного списка. Для получения отсортированной копии нужно использовать метод sorted:
— либо такой же вариант, но с параметром key (аналогично описанному выше):
newList = sorted(sortList, key=sortByLength)
У метода .sorted() есть и другие параметры, но мне они показались не настолько запутанными для самостоятельного разбора.
How to sort a list by length of string followed by reverse alphabetical order? [duplicate]
Given a list of words, return a list with the same words in order of length (longest to shortest), the second sort criteria should be alphabetical. Hint: you need think of two functions.
This is what I have so far:
it sorts by length but I don’t know how to apply the second criteria to this sort, which is by alphabetical descending.
6 Answers 6
You can do it in two steps like this:
Python’s sort is stable, which means that sorting the list by length leaves the elements in alphabetical order when the length is equal.
You can also do it like this:
Generally you never need cmp , it was even removed in Python3. key is much easier to use.
yyyyy dddl dddd ccc bbb aaa
yyyyy dddd dddl aaa bbb ccc
![]()
![]()
First sort by Alphabet and then sort by Length.
Here is a working example
Although Jochen Ritzel said you don’t need cmp, this is actually a great use case for it! Using cmp you can sort by length and then alphabetically at the same time in half the time sorting twice would take!
Функция sorted#
Функция sorted возвращает новый отсортированный список, который получен из итерируемого объекта, который был передан как аргумент. Функция также поддерживает дополнительные параметры, которые позволяют управлять сортировкой.
Первый аспект, на который важно обратить внимание — sorted всегда возвращает список.
Если сортировать список элементов, то возвращается новый список:
При сортировке кортежа также возвращается список:
Если передать sorted словарь, функция вернет отсортированный список ключей:
reverse#
Флаг reverse позволяет управлять порядком сортировки. По умолчанию сортировка будет по возрастанию элементов.
Указав флаг reverse, можно поменять порядок:
С помощью параметра key можно указывать, как именно выполнять сортировку. Параметр key ожидает функцию, с помощью которой должно быть выполнено сравнение.
Например, таким образом можно отсортировать список строк по длине строки:
Если нужно отсортировать ключи словаря, но при этом игнорировать регистр строк:
Параметру key можно передавать любые функции, не только встроенные. Также тут удобно использовать анонимную функцию lambda.
С помощью параметра key можно сортировать объекты не по первому элементу, а по любому другому. Но для этого надо использовать или функцию lambda, или специальные функции из модуля operator.
Например, чтобы отсортировать список кортежей из двух элементов по второму элементу, надо использовать такой прием:
Пример сортировки разных объектов#
Сортировка выполняется по первому элементу, например, по первому символу в списке строк, если он одинаковый, по второму и так далее. Сортировка выполняется по коду Unicode символа. Для символов из одного алфавита, это значит что сортировка по сути будет по алфавиту.
Пример сортировки списка строк:
Некоторые данные будут сортироваться неправильно, например, список IP-адресов:
Это происходит потому используется лексикографическая сортировка. Чтобы в данном случае сортировка была нормальной, надо или использовать отдельный модуль с натуральной сортировкой (модуль natsort) или сортировать, например, по двоичному/десятичному значению адреса.
Пример сортировки IP-адресов по двоичному значению. Сначала создаем функцию, которая преобразует IP-адреса в двоичный формат:
Сортировка с использованием функции bin_ip:
Также дальше будет рассматриваться модуль ipaddress, который позволит создавать специальные объекты, которые соответствуют IP-адресу и они уже сортируются правильно по десятичному значению.
Сортировка слов в строке по возрастанию их длины на Python

Статьи
Введение
В статье рассмотрим несколько способов сортировки слов в строке по возрастанию их длины при помощи языка программирования Python.
Первый способ
В первом способе для начала преобразуем строку в список используя метод split():
Далее методом sort() отсортируем получившийся список по возрастанию:
Чтобы получившийся список преобразовать в строку используем метод join():
Второй способ
Во втором способе принцип тот же, что и в первом, но для сортировки будет использован метод sorted():
Заключение
В ходе статьи мы с Вами научились сортировать слова в строке по возрастанию их длины на языке программирования Python. Надеюсь Вам понравилась статья, желаю удачи и успехов!