Python如何对元组列表进行排序?

时间:2009-03-13 19:09:17

标签: python

根据经验,似乎Python的默认列表排序器在传递元组列表时,将按每个元组中的第一个元素排序。那是对的吗?如果没有,那么通过第一个元素对元组列表进行排序的正确方法是什么?

5 个答案:

答案 0 :(得分:73)

它会自动按元组中的第一个元素对元组列表进行排序,然后按第二个元素排序,依此类推,元组([1,2,3])将在元组([1,2,4])之前进行排序。如果要覆盖此行为,则将callable作为sort方法的第二个参数传递。这个callable应该返回1,-1,0。

答案 1 :(得分:8)

是的,这是默认设置。实际上,这是Python中经典“DSU”(Decorate-Sort-Undecorate)习语的基础。请参阅Code Like a Pythonista

答案 2 :(得分:5)

不,元组sequence types就像字符串一样。通过依次比较每个元素,它们的排序方式相同:

>>> import random
>>> sorted([(0,0,0,int(random.getrandbits(4))) for x in xrange(10)])
[(0, 0, 0, 0), (0, 0, 0, 4), (0, 0, 0, 5), (0, 0, 0, 7), (0, 0, 0, 8),
(0, 0, 0, 9), (0, 0, 0, 12), (0, 0, 0, 12), (0, 0, 0, 12), (0, 0, 0, 14)]

这三个零只表示必须检查第一个元素以外的东西。

答案 3 :(得分:0)

尝试使用内部列表排序方法并传递lambda。如果你的元组第一个元素是一个整数,这应该可行。

# l is the list of tuples
l.sort(lambda x,y: x-y)

您可以将任何callable用于比较函数,不一定是lambda。但是它需要返回-1(小于),0(相等)或1(大于)。

答案 4 :(得分:0)

查看“Devin Jeanpierre”对这个问题sort-a-dictionary-in-python-by-the-value的回答,他说使用元组并显示如何按第二个值排序