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