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