我在python中有一个列表 -
[['C'], ['B'], ['A'], ['C', 'B'], ['B', 'A'], ['A', 'C']]
我想按照以下方式对其进行排序 -
[['A'], ['B'], ['C'], ['A', 'B'], ['A', 'C'], ['B', 'C']]
thefourtheye.. 11
首先对列表中的各个项进行排序,然后根据长度排序排序列表,然后根据实际元素本身对排序列表进行排序
>>> 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']]
这是有效的,因为默认情况下,字符串列表将按字典顺序排序.在您的情况下,当内部列表被排序时,外部列表首先根据列表的长度进行排序,如果它们相同,则字符串本身的实际元素将用于比较.
这可以逐步理解.第一个单独的元素排序导致了这一点
>>> [sorted(item) for item in data] [['C'], ['B'], ['A'], ['B', 'C'], ['A', 'B'], ['A', 'C']]
现在,我们需要首先根据长度按升序排序,然后对元素进行排序.因此,我们将自定义函数传递给外部排序函数,lambda x: (len(x), x)
.
首先对列表中的各个项进行排序,然后根据长度排序排序列表,然后根据实际元素本身对排序列表进行排序
>>> 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']]
这是有效的,因为默认情况下,字符串列表将按字典顺序排序.在您的情况下,当内部列表被排序时,外部列表首先根据列表的长度进行排序,如果它们相同,则字符串本身的实际元素将用于比较.
这可以逐步理解.第一个单独的元素排序导致了这一点
>>> [sorted(item) for item in data] [['C'], ['B'], ['A'], ['B', 'C'], ['A', 'B'], ['A', 'C']]
现在,我们需要首先根据长度按升序排序,然后对元素进行排序.因此,我们将自定义函数传递给外部排序函数,lambda x: (len(x), x)
.