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!
Сортировка слов в строке по возрастанию их длины на Python

Статьи
Введение
В статье рассмотрим несколько способов сортировки слов в строке по возрастанию их длины при помощи языка программирования Python.
Первый способ
В первом способе для начала преобразуем строку в список используя метод split():
Далее методом sort() отсортируем получившийся список по возрастанию:
Чтобы получившийся список преобразовать в строку используем метод join():
Второй способ
Во втором способе принцип тот же, что и в первом, но для сортировки будет использован метод sorted():
Заключение
В ходе статьи мы с Вами научились сортировать слова в строке по возрастанию их длины на языке программирования Python. Надеюсь Вам понравилась статья, желаю удачи и успехов!
Сортировка списка Python по длине строки
Я хочу отсортировать список строк на основе длины строки. Я попытался использовать сортировку следующим образом, но, похоже, это не дает мне правильного результата.
Что может быть неправильным?
6 ответов
Когда вы передаете lambda в sort , вам нужно вернуть целое число, а не логическое. Поэтому ваш код должен читать следующим образом:
Обратите внимание, что cmp является встроенной функцией, так что cmp(x, y) возвращает -1, если x меньше y , 0, если x равно y , а 1, если x больше, чем y .
Конечно, вы можете использовать параметр key :
Это говорит о методе sort для заказа на основе того, что возвращает функция ключа.
EDIT: Спасибо balpha и Ruslan ниже, указав, что вы можете просто передать len непосредственно в качестве ключевого параметра функции, тем самым устраняя необходимость в lambda :