2014-01-11 67 views
7

我有一個包含元素的非特異性量但嵌套列表的每個第一元件是一個標識符,我想使用該標識符列表,以便列表排序Python的排序()列表的第一個元素

list = [['D', 'F', 'E', 'D', 'F', 'D'],['A', 'F', 'E', 'C', 'F', 'E'],['C', 'E', 'E', 'F', 'E', 'E'],['B', 'F', 'E', 'D', 'F', 'F']] 

其排序

list = [['A', 'F', 'E', 'C', 'F', 'E'],['B', 'F', 'E', 'D', 'F', 'F'],['C', 'E', 'E', 'F', 'E', 'E'],['D', 'F', 'E', 'D', 'F', 'D']] 

我使用Python 3.3.3後

+0

你要設在列表中的第一個元素的列表進行排序?你是否嘗試使用列表sort()方法的關鍵函數? – wwii

+0

我有一個列表,其中包含非特定數量的元素,但每個嵌套列表的第一個元素是一個標識符,我想使用該標識符按順序對列表進行排序 – DaveDave

+0

正如我在我的回覆中指出的那樣,不要覆蓋構建的在構造函數中,''list''。 http://stackoverflow.com/questions/21068315/python-sort-first-element-of-list/21069081#21069081 –

回答

5

你想用.sort()sorted

>>> t = [['D', 'F', 'E', 'D', 'F', 'D'], ['A', 'F', 'E', 'C', 'F', 'E'], ['C', 'E', 'E', 'F', 'E', 'E'], ['B', 'F', 'E', 'D', 'F', 'F']] 
>>> t.sort(key=lambda x: x[0]) # changes the list in-place (and returns None) 
>>> t 
[['A', 'F', 'E', 'C', 'F', 'E'], ['B', 'F', 'E', 'D', 'F', 'F'], ['C', 'E', 'E', 'F', 'E', 'E'], ['D', 'F', 'E', 'D', 'F', 'D']] 

另請注意,您的列表需要逗號之間的元素。下面是sorted結果:

>>> sorted(t) # does not change the list but returns the sorted list 
[['A', 'F', 'E', 'C', 'F', 'E'], ['B', 'F', 'E', 'D', 'F', 'F'], ['C', 'E', 'E', 'F', 'E', 'E'], ['D', 'F', 'E', 'D', 'F', 'D']] 

正如你所看到的,後者的例子排序列表中沒有任何主要論點。前一個例子也可以;但是你提到只有第一個元素是一個唯一的標識符,所以沒有辦法告訴第二個標準可能是如何排序第一個元素之外的列表。

+0

@ Mr.T不知道爲什麼它很重要,你正在使用IDLE ... – SethMMorton

0

使用此

list.sort(lambda x,y : cmp(x[0], y[0])) 

UPDATE 它爲2.7而不是3.3的Python

+0

我有3.3 Python – DaveDave

+0

在這種情況下,您應該使用@ 275365的答案 –

1

lists.sort(key = lambda x: x[0]) 確保將在更大的列表中的每個列表之間的逗號。

3

基本上相同的其他人,但使用operator.itemgetter(),

from operator import itemgetter 
first_item = itemgetter(0) 
new_list = sorted(original_list, key = first_item) 
16

的Python由第一元件自動分揀列表的列表。例如:

lol=[[1,2,3],[5,6,7],[0,9,9]] 
sorted(lol) 
[[0, 9, 9], [1, 2, 3], [5, 6, 7]] 
0

你不應該覆蓋內置列表構造,list,使用其他名稱,而不是像這樣:

>>> a_list = [['D', 'F', 'E', 'D', 'F', 'D'],['A', 'F', 'E', 'C', 'F', 'E'],['C', 'E', 'E', 'F', 'E', 'E'],['B', 'F', 'E', 'D', 'F', 'F']] 

排序到位的列表,使用list.sort方法:

>>> a_list.sort() 

>>> a_list 
[['A', 'F', 'E', 'C', 'F', 'E'], ['B', 'F', 'E', 'D', 'F', 'F'], ['C', 'E', 'E', 'F', 'E', 'E'], ['D', 'F', 'E', 'D', 'F', 'D']] 

內置函數sorted返回一個新列表,這是您似乎不想做的事情。它返回一個新的列表,如果你不再需要舊列表會浪費內存空間。

Python會自動在第一個元素上排序。然後它會自動分類第二,第三等。使用lambda作爲別人建議意味着你只能排序第一個元素,下面的元素將被忽略。

>>> a_list = [['b', 'f'],['b', 'e'],['b', 'd'],['a', 'c'],['a', 'b'],['a', 'a'],] 
>>> a_list.sort(lambda x,y : cmp(x[0], y[0])) 
>>> a_list 
[['a', 'c'], ['a', 'b'], ['a', 'a'], ['b', 'f'], ['b', 'e'], ['b', 'd']] 

這就是爲什麼那種被描述爲穩定的排序

>>> help(list.sort) 
Help on method_descriptor: 

sort(...) 
    L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*; 
    cmp(x, y) -> -1, 0, 1 
相關問題