2017-11-25 162 views
0

我想排序的第二元素的元組列表。列表中的每個元組都由一個元組和一個整數組成。排序元組列表的第二項不工作在python

l = [((1, 0, 1), 0), ((1, 0, 6), -1), ((1, 0, 8), -1), ((1, 0, 11), 0), ((1, 0, 14), 0), ((1, 0, 15), 0), ((1, 0, 17), -5), ((1, 0, 20), -3), 
    ((1, 0, 22), 0), ((1, 0, 24), 0)] 

sorted(l, key = lambda x:x[1]) 

print(l) 

sorted(l, key = lambda x:x[0]) 

print(l) # same output 

第一sorted()聲明應根據元組的第二個元素進行排序列表,即0,-1,-1,0,0,0,-5,-3,0,0,應該返回像這樣的或類似的東西,其中的元組的第二個元素是在非減順序列表:

[((1, 0, 17), -5), ((1, 0, 20), -3), ((1, 0, 6), -1), ((1, 0, 8), -1), ((1, 0, 1), 0), ((1, 0, 11), 0), ((1, 0, 14), 0), ((1, 0, 15), 0), 
     ((1, 0, 22), 0), ((1, 0, 24), 0)] 

但這兩個print報表打印相同並保持原始列表不變。爲什麼?以及如何通過第二元素對元組列表進行排序?我甚至試過key=itemgetter(1),但結果依然如此。

+1

sorted()返回一個新列表。使用list.sort()來代替。 –

回答

1

sorted返回您交出的清單的排序版本。

該列表本身是未修改的。你總是打印未排序的列表。試試:

sorted_list_1 = sorted(l, key=lambda x: x[0]) 
sorted_list_2 = sorted(l, key=lambda x: x[2]) 
print (sorted_list1, sorted_list2)