排序:x值增加,y值减小

时间:2015-01-08 03:31:29

标签: python sorting

如何对列表列表进行排序,使x值增加,如果2个x值相同,则较低的y值优先?

例如:[[0,1],[1,0],[1,2],[1,3]]应分为[[0,1],[1,3],[1] ,2],[1,1]]。

一种方法是先在列表中应用.sort()函数,然后比较等于x的y值,但是有更简单的方法(使用lambda等)

1 个答案:

答案 0 :(得分:3)

看起来您要排序的所有项目都是数字值的双元素列表,因此以下内容应该有效。您可以为内置key函数指定sorted参数,以便为每个项创建排序键。在这种情况下,您想要的键与项目本身相同,但使用负y值来翻转它们的顺序。

>>> data = [[0, 1], [1, 0], [1, 2], [1, 3]]
>>> print(sorted(data, key=lambda x: (x[0], -x[1])))
[[0, 1], [1, 3], [1, 2], [1, 0]]

如果由于某种原因这不起作用(也许你在那里有非数字),你可以使用相同的方法,但不同地构造key函数以提供适当的比较器,无论你的数据实际上就像。