例如,我有一个列表:
[[1,1,0],[1,0,1],[0,0,0]]
首先对第一个元素进行排序,然后如果第一个元素相同,则对第二个元素进行排序,然后如果第二个元素对第三个元素排序相同,则为...... 结果应该是这样的:
[[0,0,0],[1,0,1],[1,1,0]]
显然,即使使用sorted
key=...
函数也无法轻松解决此问题
答案 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]]