Python .. Доступ к функции сортировки по умолчанию? - PullRequest
0 голосов
/ 27 февраля 2019

Код Python:

b=['six', 'small', 'he', 'foxes', 'saw']
b.sort(key=len)
b

Вывод:

['he', 'six', 'saw', 'small', 'foxes']

В приведенном выше коде я отсортировал по длине элементов и получил указанный выше вывод.

вывод, который я хочу, выглядит следующим образом: ['he', 'saw', 'six', 'small', 'foxes']

Итак, я хочу выполнить первую сортировку по длине.Затем для элементов одинаковой длины я хочу отсортировать по алфавиту.

Мой вопрос: есть ли способ сделать это без написания пользовательской функции?Может быть, что-то вроде этого:

b.sort(key=[len,sorted]) # this doesn't work but I think it explains the idea.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Простой вариант - дважды отсортировать:

b.sort()
b.sort(key=len)

Поскольку сортировка стабильна , она сохраняет порядок элементов в случае, если они равны по ключу;поэтому, сортируя сначала по алфавиту, элементы одинаковой длины остаются отсортированными таким образом.

0 голосов
/ 27 февраля 2019

Мы можем использовать составной ключ сортировки, первый сортировать по длине, второй лексикографически.Мы делаем это путем создания кортежа, потому что кортежи будут естественным образом сортироваться, используя элементы в порядке их появления.

b = ['six', 'small', 'he', 'foxes', 'saw']
b.sort(key=lambda s: (len(s), s))

Для записи, приведенные выше результаты в этом отсортированном списке ::

['he', 'saw', 'six', 'foxes', 'small']

Какой правильный порядок указан в вопросе (но пример выходных данных в вопросе неверен, поэтому, пожалуйста, имейте это в виду, прежде чем понижать голос!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...