Сортировка списка 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'] 

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

6 Solutions collect form web for “Сортировка списка Python в зависимости от длины строки”

Когда вы передаете 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) 

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

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

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

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

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

Я хотел бы добавить, как работает функция pythonic key при сортировке:

Украшение-Сортировка-Undecorate Дизайн Pattern:

Поддержка Python ключевой функции при сортировке реализуется с использованием так называемого шаблона design-sort-undecorate.

Он выполняется в три этапа:

  1. Каждый элемент списка временно заменяется «украшенной» версией, которая включает в себя результат ключевой функции, применяемой к элементу.

  2. Список сортируется на основе естественного порядка ключей.

  3. Украшенные элементы заменяются оригинальными элементами.

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

Напишите функцию lensort для сортировки списка строк по длине.

 def lensort(a): n = len(a) for i in range(n): for j in range(i+1,n): if len(a[i]) > len(a[j]): temp = a[i] a[i] = a[j] a[j] = temp return a print lensort(["hello","bye","good"]) 
 def lensort(list_1): list_2=[];list_3=[] for i in list_1: list_2.append([i,len(i)]) list_2.sort(key = lambda x : x[1]) for i in list_2: list_3.append(i[0]) return list_3 

Это работает для меня!

Самый простой способ сделать это:

list.sort (key = lambda x: len (x))

  • Как преобразовать список строк в список словарей в python?
  • Поверните строку с вложенными скобками во вложенный список, python
  • Компактный способ присвоения значений списком разрезов в Python
  • Как переместить смещение метода 'index' в 'list'
  • Python - рекурсивный список сумм
  • Создать словарь из списка python
  • Самый маленький диапазон python из нескольких списков
  • Самый быстрый способ подсчета числа вхождений в списке Python
  • Python - лучший язык программирования в мире.