2009-12-29 138 views
3

鑑於代碼:爲什麼會出現這種情況與Python的list.sort?

a=['a','b','c','d'] 
b=a[::-1] 
print b 
c=zip(a,b) 
print c 
c.sort(key=lambda x:x[1])# 
print c 

它打印:

['d', 'c', 'b', 'a'] 
[('a', 'd'), ('b', 'c'), ('c', 'b'), ('d', 'a')] 
[('d', 'a'), ('c', 'b'), ('b', 'c'), ('a', 'd')] 

爲什麼[( 'A', 'D'),( 'B', 'C'),( 'C' (''''''),(''''''),(''''''),('d','a'), '廣告')]?


同樣,假如:

c.sort(key=lambda x:3)# 
print c 

它打印:

[('a', 'd'), ('b', 'c'), ('c', 'b'), ('d', 'a')] 

沒有什麼變化 - 爲什麼?

+0

這一點很難告訴你用過什麼了Python的方面您遇到麻煩。名單? Lambda表達式?你知道「lambda x:3」是什麼意思嗎?或者x [1]? –

+0

不,我不明白。 – zjm1126

回答

7

,因爲X [1]指

使用

c.sort(key=lambda x:x[0]) 
4

你使用的第二個項目爲重點,而第二項確實上去整理c,就像你要求它上升。有什麼令人驚訝的?!

1
from operator import itemgetter  
c.sort(key=itemgetter(0)) 
0

你排序利用每個元組作爲一個關鍵的第二個元素的列表,以便您得到的元組由他們的第二個元素(請注意「A」,「B」,「C」,「d命令'按順序遞增)。有什麼問題?

1

作爲其他人所說,[1]指第二元件,所以在第一部分中的元素進行排序的方式。

至於第二部分,list.sort()stable,所以評估爲相同密鑰的元素將保持其在序列中的相對位置。這就是爲什麼使用.sort(reverse=True)可以給從.sort()不同的結果,然後.reverse()

相關問題