具有元组键的最大功能[更新]

时间:2019-05-28 09:51:31

标签: python

我试图了解以下行中发生的事情:

print(max([1, -2, 3, -1], key=lambda x:(-abs(x), x), default=0))

我的理解是,lambda将为列表[1 、、-2、3,-1]中的每个元素返回一个元组。

但是如何将列表与元组进行比较?

为什么输出是1,而不是3?

我尝试过

print(max([1, -2, 3, -1], key=(-1, 1), default=0))

但它说uple不可召唤


在这里了解问题的关键是所使用的关键功能。如果难以理解,我建议您阅读this并以最大的等级进行排序(因为排序会给您提供信息提示)

我的理解:
步骤1. lambda函数将a = [1, -2, 3, -1]转换为新的b = [(-1, 1), (-2, -2), (-3, 3), (-1, 1)]
步骤2. max / sort将处理新列表b。它将首先比较第一个元素,如果绑定,则比较第二个
第三步根据{{​​1}}

转换sorted(b)

3 个答案:

答案 0 :(得分:1)

max函数遍历列表的每个元素,并应用lambda函数确定每个项目的值,从而为您提供:

[(-1,1), (-2,-2), (-3,3), (-1,-1)]

然后运行max,默认情况下,max首先比较每个元组的第一个索引处的项目。由于第一个元素在所有情况下均为负数,因此-1是最大的第一个元素,它对应于原始数组中的1-1。由于存在平局,因此它将比较第二个元素,其中(-1,1)是此新数组中的最大元素,它对应于原始数组中的1

答案 1 :(得分:0)

您使用过key = lambda x:(-abs(x),x),这意味着与max相反,这就是为什么与其获得尽可能大的数字,它还给了您最低的数字。请注意,如果有+-相同的数字,则最大值将始终为正数,因为其abs()

print(max([1, -2, 3, -1], key=lambda x:(-abs(x), x), default=0))
print(max([1, -2, 3, -1], key=lambda x:(abs(x), x), default=0))
print(max([-2, 3, 4, 5], key=lambda x:(-abs(x), x), default=0))

results:
1
3
-2

答案 2 :(得分:-1)

我认为您想使用key。所以,我改变了。您无需使用lambda。基本上,您的想法是正确的。

print(max([1, -2, 3, -1], key=abs, default=0))