我试图了解以下行中发生的事情:
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)
答案 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))