2016-02-29 244 views
0

我有這個名單是這樣的:通過排序列表列

list1 = [["A",5,2,8,3],["B",9,5,1,5]] 

我試圖用第二列排序。我期望list1然後是

[["B",9,5,1,5],["A",5,2,8,3]] 

因爲9大於5對嗎?我正在使用

sorted(lis1, key=lambda a : a[1]) 

但是它沒有對它進行排序;它仍然和以前一樣。爲什麼這不起作用?

+0

它通過默認按升序順序。添加參數'reverse = True'到你的'sorted'函數來產生所需的輸出 – gtlambert

回答

1

你只需要扭轉這種局面:

list1 = [["A",5,2,8,3],["B",9,5,1,5]] 
list1 = sorted(list1, key=lambda a : a[1], reverse=True) 
print(list1) 
# outputs [["B",9,5,1,5],["A",5,2,8,3]] 

9> 5,所以說到後來,除非你扭轉。

+0

試過了,它仍然沒有改變.. – Alster

+0

奇怪......當我複製上面的代碼並運行它時,它的工作原理 – rofls

+1

你確定你在做:'list1 = sorted(list1,key = lambda a:a [1],reverse = True)'? 'sorted'不修改列表,它返回一個修改的列表... – rofls

2

sorted

返回從項目的迭代

一個新的排序列表它確實排序到位。

0

使用operator.itemgetter()函數:

from operator import itemgetter 

list1 = [["A",5,2,8,3],["B",9,5,1,5],["C",1,2,8,3]] 

print(sorted(list1, key=itemgetter(1))) 
print(sorted(list1, key=itemgetter(1), reverse=True)) 

輸出:

[['C', 1, 2, 8, 3], ['A', 5, 2, 8, 3], ['B', 9, 5, 1, 5]] 
[['B', 9, 5, 1, 5], ['A', 5, 2, 8, 3], ['C', 1, 2, 8, 3]]