2015-12-10 21 views
6

mam listę w Pythonie jak -sortowania listy listy w python

[['C'], ['B'], ['A'], ['C', 'B'], ['B', 'A'], ['A', 'C']] 

Chcę uporządkować to podoba następująco -

[['A'], ['B'], ['C'], ['A', 'B'], ['A', 'C'], ['B', 'C']] 

Odpowiedz

10

sortuj poszczególne pozycje na listach, a następnie sortuje posortowane listy na podstawie długości, a następnie samych rzeczywistych elementów, takich jak ta

>>> 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']] 

Działa to, ponieważ lista ciągów wil Jestem domyślnie posortowana leksykograficznie. W twoim przypadku, kiedy listy wewnętrzne są sortowane, listy zewnętrzne są najpierw sortowane na podstawie długości listy, a jeśli są takie same, to do porównania będą używane rzeczywiste elementy samego łańcucha.


Można to zrozumieć krok po kroku. Pierwsze poszczególne elementy sortowania wyników w tej

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

Teraz musimy rozwiązać ten opiera się na długości w kolejności rosnącej, a potem także elementy powinny być posortowane. Tak więc przekazujemy funkcję niestandardową do zewnętrznej funkcji sortowania, lambda x: (len(x), x).

+0

Znakomity! kolejna sztuczka pod kapeluszem - klucz określa funkcję 'jednego' argumentu używanego do wyodrębnienia klucza porównania z każdego elementu listy. – SIslam