2013-02-12 150 views
1

這裏是我的問題,我有tuple1=[(1, 3), (3, 2), (2, 1)]我想根據每個元組這樣的結果會是這樣 output=[(2, 1), (3, 2), (1, 3)]低於 的最後一位數字進行排序元組是我的代碼Python的元組排序基於最後一個元素上

i=0 
for x in tuples: 
    c.append(x[len(x)-1]) 
    last=sorted(c) 
    for y in last.iteritems(): 
     if(y in x[len(x)-1]): 
      print x    
      #b.insert(i,x) 
i=i+1 

運行IAM收到錯誤訊息後

Traceback (most recent call last): 
    File "x.py", line 47, in <module> 
    sort_last([(1, 3), (3, 2), (2, 1)]) 
    File "x.py", line 35, in sort_last 
if(y in x[len(x)-1]): 
    TypeError: argument of type 'int' is not iterable 
+0

我的不好,這個問題不是關於排序,但解決方案是相同的:指定「鍵」功能,以「排序」或「排序」。 – 2013-02-12 09:32:06

回答

10

指定在sorted功能的key參數。

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

sorted功能(還有list.sort法)有一個可選的參數key指定什麼對列表進行排序。

+0

+1這個優雅的解決方案。 – George 2013-02-12 09:34:19

+0

y它的工作原理..但是有沒有其他方法沒有使用'拉姆達'我的意思是使用循環本身.... – Friend 2013-02-12 09:48:56

+2

如果你需要它倒序,你還可以添加'reverse'關鍵字:'output = sorted( tuple1,key = lambda x:x [-1],reverse = True)' – drekyn 2013-02-12 09:49:28

相關問題