你不應該覆蓋內置列表構造,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
你要設在列表中的第一個元素的列表進行排序?你是否嘗試使用列表sort()方法的關鍵函數? – wwii
我有一個列表,其中包含非特定數量的元素,但每個嵌套列表的第一個元素是一個標識符,我想使用該標識符按順序對列表進行排序 – DaveDave
正如我在我的回覆中指出的那樣,不要覆蓋構建的在構造函數中,''list''。 http://stackoverflow.com/questions/21068315/python-sort-first-element-of-list/21069081#21069081 –