在python中对包含3个元素的元组列表进行排序

在python中对包含3个元素的元组列表进行排序,python,list,sorting,tuples,Python,List,Sorting,Tuples,我有一些元组的列表。每个元组有三个元素。我需要把清单分类。为了打破两个元组之间的联系,将查看元组的第一个元素,如果仍然是联系的,则查看第二个元素。清单如下 L = [(1, 14, 0), (14, 1, 1), (1, 14, 2), (14, 2, 3), (2, 4, 4), (4, 11, 5), (11, -1000, 6)] 在C语言中,排序函数采用比较函数,这一切都很简单。但我在python中尝试了一段时间后,还是没能找到答案。有人能帮我吗?只需对列表进行排序;默认排序正是您想要

我有一些元组的列表。每个元组有三个元素。我需要把清单分类。为了打破两个元组之间的联系,将查看元组的第一个元素,如果仍然是联系的,则查看第二个元素。清单如下

L = [(1, 14, 0), (14, 1, 1), (1, 14, 2), (14, 2, 3), (2, 4, 4), (4, 11, 5), (11, -1000, 6)]

在C语言中,排序函数采用比较函数,这一切都很简单。但我在
python
中尝试了一段时间后,还是没能找到答案。有人能帮我吗?

只需对列表进行排序;默认排序正是您想要的

当比较两个元组时,它们是根据其内容排序的;首先在第一个元素上排序,然后如果它们相等,则在第二个元素上排序,以此类推

演示:

我向前移动了
(14,2,3)
元素,以显示它仍然在
(14,1,1)
之后排序

Python的
list.sort()
方法和
sorted()
函数使用一个
key
函数,如果需要不同的排序顺序,该函数将返回一个要排序的值。如果要先对最后一个元素排序,然后再对第二个元素排序,等等。例如,您可以使用:

sorted(L, key=lambda t: t[::-1])
其中lambda返回一个反向元组进行排序。传递给
键的可调用对象将为输入序列中的每个元素调用,以在排序之前“增加”列表,就像您执行了以下操作一样:

[s[1] for s in sorted((key(s), s) for s in L)]
t[:-1]
使用


有关更多详细信息,请参见。

排序(L)
给了我
[(1,14,0),(1,14,2),(2,4,4),(4,11,5),(11,-1000,6),(14,1,1),(14,2,3)]
。这是一个期望的输出吗?你想要的顺序被称为字典顺序,它是序列的默认顺序,所以你不需要做任何特殊的事情。我不理解下面的部分。排序(L,key=lambda t:t[::-1])请你解释一下好吗?我以前用不同的方法尝试过。代码snipet在这里:但它没有正常工作。我哪里做错了?您定义了
cmp\u to\u key()
两次,嵌套。外部函数不返回任何内容,因此该函数的结果是对每个值按
None
进行排序;这使得原始顺序不受影响。完全删除其他函数。哦,我的错误。我只是从网络上复制和粘贴,并将其错误地粘贴到函数中:-P它正在工作。
[s[1] for s in sorted((key(s), s) for s in L)]