我在努力理解下面这行发生了什么:
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
max函数遍历列表中的每个元素,并应用lambda函数来确定每个项的值,从而得到:
然后运行max,默认情况下,它首先比较每个元组的第一个索引处的项。因为第一个元素在所有情况下都是负数,
-1
是最大的第一个元素,它对应于原始数组中的1
和-1
。因为有一个tie,所以它将第二个元素(-1,1)
作为这个新数组中最大的元素进行比较,这个元素对应于原始数组中的1
。你知道吗你使用了key=lambda x:(-abs(x),x)这意味着与max相反,这就是为什么它没有得到尽可能大的数,而是给出了最小的数。注意,如果有+-相同的数字,那么max将得到的总是正数,因为它的abs()
相关问题 更多 >
编程相关推荐