如何在python中对包含二阶的列表进行排序?

时间:2016-02-09 13:57:43

标签: python list sorting

例如,我有一个列表:

[[1,1,0],[1,0,1],[0,0,0]]

首先对第一个元素进行排序,然后如果第一个元素相同,则对第二个元素进行排序,然后如果第二个元素对第三个元素排序相同,则为...... 结果应该是这样的:

[[0,0,0],[1,0,1],[1,1,0]]

显然,即使使用sorted

key=...函数也无法轻松解决此问题

1 个答案:

答案 0 :(得分:5)

sorted()解决了这个问题,因为列表对象会被比较lexicographically。也就是说,两个列表是根据它们之间不同的第一个元素排序的。

不使用密钥时,您所需的排序输出是默认值:

>>> sorted([[1, 1, 0], [1, 0, 1], [0, 0, 0]])
[[0, 0, 0], [1, 0, 1], [1, 1, 0]]

从Python参考文档的Comparisons section

  

使用相应元素的比较,按字典顺序比较元组和列表。这意味着要比较相等,每个元素必须比较相等,并且两个序列必须是相同的类型并具有相同的长度。

     

如果不相等,则序列的排序与其第一个不同的元素相同。例如,cmp([1,2,x], [1,2,y])返回与cmp(x,y)相同的内容。如果相应的元素不存在,则首先排序较短的序列(例如,[1,2] < [1,2,3])。

key函数不仅限于返回单个元素,它还可以返回列表或元组以在排序时断开关系。例如,首先在最后一个元素上排序,然后在第一个元素上排序,如下所示:

>>> sorted([[1, 1, 0], [1, 0, 1], [0, 0, 0]], key=lambda l: (l[-1], l[0]))
[[0, 0, 0], [1, 1, 0], [1, 0, 1]]