Python 3 列表排序与决胜局

JSO*_*ody 8 python sorting lambda list timsort

我在这里看到了很多类似的问题,但到目前为止他们都没有直接回答这个问题,而是在特定场景中为提问者的问题提供了解决方法。

我想要一个关于在 Python 的 Timsort 中打破关系的问题的一般答案。可以做到吗?如果可以做到,那么一般的方法是什么。

例如取元组列表

>>> tuples = [(2,1), (2,9), (3, 8), (1,3), (1,2), (1,1)]
Run Code Online (Sandbox Code Playgroud)

我想对这些元组进行排序,以便它们的顺序主要由每个元组中第一个值的值决定。如果我们离开reversed=False,那么它们将按递增顺序排序。我会用以下方法做到这一点

>>> tuples.sort(key=lambda t: t[0])
Run Code Online (Sandbox Code Playgroud)

结果将是

>>> tuples
[(1,3), (1,2), (1,1), (2,1), (2,9), (3, 8)]
Run Code Online (Sandbox Code Playgroud)

问题是我可以做些什么来打破前三个元素之间的联系。我想知道这在定义排序键的任何问题中是否普遍可行和适用。

大多数情况下,其他答案会提到 Timsort 是稳定的。这条规则是否意味着不可能打破关系?

Dan*_*kin 20

据我了解,您想先对初始值进行排序,然后对第二个元组值进行排序,而不会丢失初始排序列表。

尝试这个

tuples.sort(key=lambda x: (x[0], x[1]))
Run Code Online (Sandbox Code Playgroud)

在这种情况下,x[0] 和 x[1] 分别是主要和次要排序键。希望这可以帮助。

  • 这是完全不包含“key”参数的默认操作。 (4认同)