arr.sort(key=lambda x: (x[0],-x[1])) 是什么意思?

Sub*_*dip 4 arrays sorting lambda list python-3.x

>>> arr=[[4,5],[4,6],[6,7],[2,3],[1,1]]
>>> arr.sort(key=lambda x:x[0]) #statement 1
>>> arr
[[1, 1], [2, 3], [4, 5], [4, 6], [6, 7]]
>>> arr.sort(key=lambda x:(x[0],-x[1])) #statement 2
>>> arr
[[1, 1], [2, 3], [4, 6], [4, 5], [6, 7]]
Run Code Online (Sandbox Code Playgroud)

因此,我可以观察语句 1 和语句 2 的执行之间的差异。我知道语句 1 按 x[0] 的升序对列表进行排序。但是如果我们使用语句2那么列表是如何排序的呢?

rda*_*das 8

lambda x:(x[0],-x[1])
Run Code Online (Sandbox Code Playgroud)

这会生成(第一个元素,第二个元素的负数)的元组

当您对 2 元组进行排序时,它们的排序基于

  1. 第一个元素
  2. 如果第一个元素相等,则第二个元素相等

所以

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

arr根据以下条件对列表进行排序:

  1. 第一个元素
  2. 如果第一个元素相等,则基于第二个元素的负值。

(这就是为什么[4,6]领先于[4,5]since -6 < -5