我有一个包含非特定数量元素的列表,但嵌套列表的每个第一个元素都是一个标识符,我想使用该标识符按顺序对列表进行排序
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 :(得分:23)
Python会自动按第一个元素对列表列表进行排序。例如:
lol=[[1,2,3],[5,6,7],[0,9,9]]
sorted(lol)
[[0, 9, 9], [1, 2, 3], [5, 6, 7]]
答案 1 :(得分:8)
您想使用.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']]
如您所见,后一个示例在没有任何键参数的情况下对列表进行排序。前一个例子也可以;但是你提到只有第一个元素是一个唯一的标识符,所以没有办法说明在第一个元素之外对列表进行排序的次要标准。
答案 2 :(得分:4)
lists.sort(key = lambda x: x[0])
确保在较大列表中的每个列表之间添加逗号。
答案 3 :(得分:3)
基本上与其他人相同,但使用operator.itemgetter(),
from operator import itemgetter
first_item = itemgetter(0)
new_list = sorted(original_list, key = first_item)
答案 4 :(得分:1)
您不应该覆盖内置列表构造函数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
答案 5 :(得分:0)
使用此
list.sort(lambda x,y : cmp(x[0], y[0]))
<强>更新强> 它适用于2.7但不适用于Python 3.3