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