Python sort()列表的第一个元素

时间:2014-01-11 21:48:52

标签: python list sorting python-3.3

我有一个包含非特定数量元素的列表,但嵌套列表的每个第一个元素都是一个标识符,我想使用该标识符按顺序对列表进行排序

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

6 个答案:

答案 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