如何按第三个元素、然后第一个元素等排序Python列表?
假设我有一个列表,里面的内容像这样:[[x,y,z], [x,y,z]等等,每一组代表一个随机的点。
我想按照z坐标的大小来排列这些点,然后在每一组相同z值的点中,再按照x坐标的大小进行排序。这样做可以吗?
4 个回答
2
如果你的列表是这样的:
[ [[x,y,z],[x1,y1,z1]] , [[x,y,z],[x1,y1,z1]] ... ]
那么你可以使用这个:
sorted(tuples, key=lambda x: (x[0][2], x[0][0]))
2
对于简单的查找,可以使用 itemgetter
,正如 Andrew White 所建议的那样。但如果查找的情况比较复杂,你可能需要自己写一个函数,可以用 def
或者 lambda
来定义。比如:
>>> sorted(l, key=lambda x: (x[0][2], x[0][0]))
[[[10, 2, 3], [4, 5, 6]], [[8, 13, 9], [15, 16, 17]], [[9, 3, 9], [9, 10, 11]]]
12
当然,可以看看这个页面,在“操作符模块函数”这一部分。简单来说,你只需要用到排序的关键功能,配合itemgetter操作符就可以了……
from operator import itemgetter
sorted(tuples, key=itemgetter(2,0))