Сортировка Python перечисляет на основе длины строки

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

xs = ['dddd','a','bb','ccc']
print xs
xs.sort(lambda x,y: len(x) < len(y))
print xs

['dddd', 'a', 'bb', 'ccc']
['dddd', 'a', 'bb', 'ccc']

Что могло бы быть неправильным?

94
задан Tiddo 6 September 2015 в 10:02
поделиться

2 ответа

Когда вы передаете лямбда в sort , вам нужно вернуть целое число, а не логическое значение. Поэтому ваш код должен выглядеть следующим образом:

xs.sort(lambda x,y: cmp(len(x), len(y)))

Обратите внимание, что cmp является встроенной функцией, так что cmp (x, y) возвращает -1, если x меньше y , 0, если x равно y , и 1, если x больше, чем y ].

Конечно, вместо этого вы можете использовать параметр key :

xs.sort(key = lambda s: len(s))

Он сообщает методу sort порядок на основе того, что возвращает функция ключа.

РЕДАКТИРОВАТЬ: Спасибо balpha и Руслану ниже за указание на то, что вы можете просто передать len напрямую в качестве ключевого параметра функции, тем самым устраняя необходимость в лямбда :

xs.sort(key = len)

И, как Руслан указывает ниже, вы также можете использовать встроенную функцию sorted вместо метода list.sort , который создает новый список, а не сортирует существующий. на месте:

print sorted(xs, key=len)
176
ответ дан 24 November 2019 в 05:59
поделиться

То же, что и в ответе Эли - только в более короткой форме, потому что здесь вы можете пропустить часть лямбда .

Создание нового списка:

>>> xs = ['dddd','a','bb','ccc']
>>> sorted(xs, key=len)
['a', 'bb', 'ccc', 'dddd']

Сортировка по месту:

>>> xs.sort(key=len)
>>> xs
['a', 'bb', 'ccc', 'dddd']
83
ответ дан 24 November 2019 в 05:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: