sorted()如何用于列表中的列表

时间:2018-11-06 17:01:12

标签: python python-3.x list

我对列表中的列表如何排序感到困惑。

L = [[1,1,1],[0,9,0],[2,1,1]]

sorted(L)返回[[0, 9, 0], [1, 1, 1], [2, 1, 1]]

这意味着它不是基于和,因为0 + 9 + 0比其他两个都大。

2 个答案:

答案 0 :(得分:1)

否,它基于迭代器的所有元素,从迭代器的第一个元素开始

sorted(L,key=lambda x:(x[0],x[1],x[2]) #==sorted(L)

如果您需要总和

sorted(L,key=sum) 

上述代码的简化版本,可以进一步了解关键参数

print(sorted(L,key=lambda x: x[0]+x[1]+x[2]))

答案 1 :(得分:0)

内置sorted认为依次迭代的每个元素。因此,例如,[0, 9, 0]首先出现是因为0 < 10 < 2

为帮助您获得直觉,您可以测试一些示例:

[0,9,0] < [1,1,1]  # True
[0,9,0] < [0,8,0]  # False
[1,1,1] < [2,1,1]  # True

因此sorted与定义比较运算符的方式一致。 Python中的序列对象通常支持lexicographic comparison。要按每个列表的总和排序,您需要向key参数提供函数,在本例中为内置sum

res = sorted(L, key=sum)