根据经验,似乎Python的默认列表排序器在传递元组列表时,将按每个元组中的第一个元素排序。那是对的吗?如果没有,那么通过第一个元素对元组列表进行排序的正确方法是什么?
答案 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的回答,他说使用元组并显示如何按第二个值排序