2011-12-15 183 views
3

說我有一個[[x,y,z],[x,y,z]等等]形式的列表,其中每個分組代表一個隨機點。按第三個元素排序Python列表,然後按第一個元素排序?

我想按z座標排序我的點,然後在每個z的分組內,按x座標排序它們。這可能嗎?

+1

移動球門柱約翰·史密斯。你的問題是一個寫得很好的問題,直到你在Andrew White的回答中評論說你的數據結構不像你的問題中描述的那樣。這是相當糟糕的形式。 – MattH 2011-12-15 16:34:43

+0

是無意的,道歉 – 2011-12-15 17:19:21

回答

12

好的,看看this page下的「操作員模塊功能」部分。基本上你只需要使用排序是與itemgetter操作鍵的功能...

from operator import itemgetter 
sorted(tuples, key=itemgetter(2,0)) 
0

如果進一步下降的頁面懷特先生的聯繫,你會看到你如何指定任意函數來計算你的排序鍵(使用提供的方便的cmp_to_key函數)。

2

對於簡單的查找,請按照Andrew White的建議使用itemgetter。但是對於更復雜的查找,您可能需要創建一個函數,使用deflambda。例如:

>>> 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]]] 
2

如果你的列表形式

[ [[x,y,z],[x1,y1,z1]] , [[x,y,z],[x1,y1,z1]] ... ] 

然後使用此:

sorted(tuples, key=lambda x: (x[0][2], x[0][0])) 
相關問題