繁体   English   中英

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

[英]How does Python sort a list of tuples?

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

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

是的,这是默认设置。 实际上,这是 Python 中经典的“DSU”(装饰-排序-取消装饰)习语的基础。 请参阅像 Pythonista 一样的代码

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

>>> 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)]

三个零只是为了表明必须检查除第一个元素以外的其他东西。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM