2011-03-05 126 views
8

我有一個列表的列表(不能爲元組,因爲我必須動態地生成它),它被構造爲一個int和一個浮動的名單,像這樣的列表:對列表進行排序的方法?

[[1,1.0345],[2,5.098],[3,4.89],[2,5.97]] 

我想得到它的排序,但我只設法得到內置的排序功能,以列表的第一個元素排序或不做任何事情,但我需要按列表中的第二個元素排序,我不想實現我自己的排序功能。所以我想要的一個例子是:

[[1,1.0345],[3,4.89],[2,5.098],[2,5.97]] 

有人能告訴我如何獲得一個內置的排序功能來做到這一點?

回答

18

通過key的說法。

L.sort(key=operator.itemgetter(1)) 
+0

這工作謝謝。 – user381261 2011-03-05 02:26:12

+1

我不認爲自從我們進行了「排序」後我就使用了'sort'。但'operator.itemgetter'要比編寫你自己的lambda好。 – oylenshpeegul 2011-03-05 02:40:23

+1

@oylenshpeegul:我真的很好奇。爲什麼operator.itemgetter優越?我的直覺是寫lambda。它更短,更通用,並且不需要導入我很少使用的模塊。我承認,itemgetter似乎快了30%左右,但這不太可能成爲實際代碼中的瓶頸。 – DSM 2011-03-05 03:12:30

1

如何使用它們的排序關鍵參數...

sorted_list = sorted([[1,1.0345],[3,4.89],[2,5.098],[2,5.97]], key=lambda x: x[1]) 

這告訴Python來使用項目列表列表中的每個列表作爲比較關鍵的指標1排序。

+0

我試過了,它給我回不排序列表。 – user381261 2011-03-05 02:23:08

+0

這是因爲排序返回一個新的列表。內置.sort對現有列表進行排序。 – 2011-03-05 02:25:36

+0

@user:謝謝Senthil,我沒有意識到這可能不被理解。 – 2011-03-05 02:27:06

10
>>> l = [[1,1.0345],[2,5.098],[3,4.89],[2,5.97]] 
>>> l.sort(key=lambda x: x[1]) 
>>> l 
[[1, 1.0345], [3, 4.8899999999999997], [2, 5.0979999999999999], [2, 5.9699999999999998]] 
+0

x = [[[5,3],1.0345],[[5,6],5.098],[[5,4],4.89],[[5,1],5.97] ,我們如何才能對x [0] [1]中的元素進行排序呢? – nidHi 2016-12-02 09:46:50