首页 > 解决方案 > arr.sort(key=lambda x: (x[0],-x[1])) 是什么意思?

问题描述

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

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

标签: arrayspython-3.xlistsortinglambda

解决方案


lambda x:(x[0],-x[1])

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

当您对 2 元组进行排序时,它们会根据

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

所以

arr.sort(key=lambda x:(x[0],-x[1]))

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

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

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


推荐阅读