Python 3 列表排序与决胜局
Python 3 list sorting with a tie-breaker
我在这里看到了很多类似的问题,但是 none 到目前为止已经直接回答了问题,而是在特定情况下为提问者的问题提供了解决方法。
我想对 Python 的 Timsort 中打破关系的问题有一个笼统的回答。可以吗?如果可以的话,一般的做法是什么
例如取元组列表
>>> tuples = [(2,1), (2,9), (3, 8), (1,3), (1,2), (1,1)]
我想对这些元组进行排序,以便它们的顺序主要由每个元组中第一个值的值决定。如果我们离开 reversed=False
,那么它们将按升序排序。
我会用下面的
来做到这一点
>>> tuples.sort(key=lambda t: t[0])
结果会是
>>> tuples
[(1,3), (1,2), (1,1), (2,1), (2,9), (3, 8)]
问题是我通常可以做些什么来打破前三个元素之间的联系。我想知道这是否通常可行并适用于出现定义排序键的任何问题。
大多数时候其他答案会提到 Timsort 稳定。这条规则是否意味着不可能打破平局?
据我了解,您想先对初始值进行排序,然后对第二个元组值进行排序,而不丢失初始排序列表。
试试这个
tuples.sort(key=lambda x: (x[0], x[1]))
在这种情况下,x[0] 和 x[1] 分别是主要和次要排序键。希望这有帮助。
我在这里看到了很多类似的问题,但是 none 到目前为止已经直接回答了问题,而是在特定情况下为提问者的问题提供了解决方法。
我想对 Python 的 Timsort 中打破关系的问题有一个笼统的回答。可以吗?如果可以的话,一般的做法是什么
例如取元组列表
>>> tuples = [(2,1), (2,9), (3, 8), (1,3), (1,2), (1,1)]
我想对这些元组进行排序,以便它们的顺序主要由每个元组中第一个值的值决定。如果我们离开 reversed=False
,那么它们将按升序排序。
我会用下面的
>>> tuples.sort(key=lambda t: t[0])
结果会是
>>> tuples
[(1,3), (1,2), (1,1), (2,1), (2,9), (3, 8)]
问题是我通常可以做些什么来打破前三个元素之间的联系。我想知道这是否通常可行并适用于出现定义排序键的任何问题。
大多数时候其他答案会提到 Timsort 稳定。这条规则是否意味着不可能打破平局?
据我了解,您想先对初始值进行排序,然后对第二个元组值进行排序,而不丢失初始排序列表。
试试这个
tuples.sort(key=lambda x: (x[0], x[1]))
在这种情况下,x[0] 和 x[1] 分别是主要和次要排序键。希望这有帮助。