Как отсортировать список по длине в python
Перейти к содержимому

Как отсортировать список по длине в python

  • автор:

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

Arindam Roychowdhury's user avatar

jyfar's user avatar

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

Статьи

Введение

В статье рассмотрим несколько способов сортировки слов в строке по возрастанию их длины при помощи языка программирования 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 :

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *