带元组键的最大函数[更新]

2024-09-29 18:46:36 发布

您现在位置: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,并使用sort而不是max(因为sort会给您提供一个信息anwser)

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


Tags: lambdakey函数信息default元素列表abs
2条回答

max函数遍历列表中的每个元素,并应用lambda函数来确定每个项的值,从而得到:

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

然后运行max,默认情况下,它首先比较每个元组的第一个索引处的项。因为第一个元素在所有情况下都是负数,-1是最大的第一个元素,它对应于原始数组中的1-1。因为有一个tie,所以它将第二个元素(-1,1)作为这个新数组中最大的元素进行比较,这个元素对应于原始数组中的1。你知道吗

你使用了key=lambda x:(-abs(x),x)这意味着与max相反,这就是为什么它没有得到尽可能大的数,而是给出了最小的数。注意,如果有+-相同的数字,那么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

相关问题 更多 >

    热门问题