2015-12-10 3 views

ответ

10

сортировать отдельные элементы в списках, а затем сортировать отсортированные списки, основанные на длине, а затем сами фактические элементы, такие как

>>> data = [['C'], ['B'], ['A'], ['C', 'B'], ['B', 'A'], ['A', 'C']] 
>>> sorted((sorted(item) for item in data), key=lambda x: (len(x), x)) 
[['A'], ['B'], ['C'], ['A', 'B'], ['A', 'C'], ['B', 'C']] 

Это работает, потому что список строк wil l по умолчанию сортировать лексикографически. В вашем случае, когда внутренние списки отсортированы, внешние списки сначала сортируются в зависимости от длины списка, и если они одинаковы, тогда фактические элементы самой строки будут использоваться для сравнения.


Это можно понять шаг за шагом. Первые отдельные элементы сортировки результатов в этом

>>> [sorted(item) for item in data] 
[['C'], ['B'], ['A'], ['B', 'C'], ['A', 'B'], ['A', 'C']] 

Теперь мы должны разобраться в этом на основании длины в порядке возрастания, а затем элементы также должны быть отсортированы. Таким образом, мы передаем пользовательскую функцию внешней функции сортировки, lambda x: (len(x), x).

+0

Превосходно! другой трюк под клавишей hat-- указывает функцию 'one'argument, которая используется для извлечения ключа сравнения из каждого элемента списка. – SIslam

Смежные вопросы