Когда вы передаете lambda
в 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
для упорядочения на основе того, что возвращает ключевая функция.
EDIT: Спасибо Бальфе и Руслану ниже за то, что они указали, что вы можете просто передать len
непосредственно в качестве ключевого параметра функции, тем самым устраняя необходимость в lambda
:
xs.sort(key = len)
И как Руслан указывает ниже, вы также можете использовать встроенную отсортированную функцию вместо метода list.sort
, который создает новый список вместо сортировки существующего на месте:
print sorted(xs, key=len)