我有一些元组列表。每个元组都有三个元素。我需要对列表进行排序。为了打破两个元组之间的联系,首先查看元组的第一个元素然后再绑定第二个元素。列表如下所示。
L = [(1, 14, 0), (14, 1, 1), (1, 14, 2), (14, 2, 3), (2, 4, 4), (4, 11, 5), (11, -1000, 6)]
在C中,sort函数采用比较函数,并且只执行所有操作。但有时在python
尝试后我无法弄明白。有人能帮助我吗?
答案 0 :(得分:9)
只需对列表进行排序;默认排序正是您想要的。
比较两个元组时,根据其内容对它们进行排序;先在第一个元素上排序,然后如果它们相等,则在第二个元素上排序等等。
演示:
>>> L = [(14, 2, 3), (1, 14, 0), (14, 1, 1), (1, 14, 2), (2, 4, 4), (4, 11, 5), (11, -1000, 6)]
>>> sorted(L)
[(1, 14, 0), (1, 14, 2), (2, 4, 4), (4, 11, 5), (11, -1000, 6), (14, 1, 1), (14, 2, 3)]
我向前移动了(14, 2, 3)
元素,表明它仍然在(14, 1, 1)
之后排序。
Python的list.sort()
方法和sorted()
函数使用key
函数返回一个值,如果您需要不同的排序顺序,则可以对其进行排序。如果你想先对最后一个元素进行排序,然后再对最后一个元素进行排序,等等,你可以使用:
sorted(L, key=lambda t: t[::-1])
其中lambda返回一个反向元组以进行排序。传递给key
的可调用对象被调用输入序列中的每个元素,以便在排序之前“扩充”列表,就像您已经完成的那样:
[s[1] for s in sorted((key(s), s) for s in L)]
t[::-1]
使用reversing slice。
有关详细信息,请参阅Python Sorting HOWTO。