有人可以解释为什么ref_len
= 9
运行后,以及下面显示的代码中的第二行如何工作吗?
ref_len_list = [9,9,5,9]
ref_len = min(ref_len_list, key=lambda x:abs(x-8))
答案 0 :(得分:1)
该行:
ref_len = min(ref_len_list, key=lambda x:abs(x-8))
将在ref_len_list
中寻找abs(number - 8)
具有最低值的数字,因此它是最接近8
的值。因为9
,所以从此列表中获得数字abs(9-8) < abs(5-8)
。如果此列表中同时有9
和7s
,它将仅给出其中的第一个。
所以:
min([9,9,5,9], key=lambda x:abs(x-8)) # --> 9
min([7,9,5,6], key=lambda x:abs(x-8)) # --> 7
min([9,7,5,6], key=lambda x:abs(x-8)) # --> 9
min([7,9,5,8], key=lambda x:abs(x-8)) # --> 8
该行通过使用min
函数并将可选的key
参数传递给该函数来工作。 key
参数将为函数指定在对列表元素进行排名时应使用的条件。
在这种情况下,为key
参数提供了匿名lambda
函数,该函数将以数字x
作为参数并返回abs(x-8)
。
函数lambda x:abs(x-8))
可以重写如下:
def func(x):
return abs(x-8)
答案 1 :(得分:0)
第二行代码ref_len = min(ref_len_list, key=lambda x:abs(x-8))
仅查看第一行代码ref_len_list = [9,9,5,9]
并找到最接近8的值。它只是从满足代码要求的列表中选择一项。 / p>
答案 2 :(得分:0)
min
从列表中选择最小值。如果没有给定key
参数,它仅使用值本身来确定“最小值”是什么(即从数字列表中可以明显看出最小值是多少)。给定一个key
自变量,它使用该函数获取应考虑的列表中每个项目的值。对于这样的情况,通常是的意思:
[{'foo': 3, 'bar': 'baz'}, {'foo': 4}]
min
不能只知道应该在此处使用什么值,所以您会做min(lst, key=lambda i: i['foo'])
,它返回{'foo': 3, 'bar': 'baz'}
,因为它的值最低{{1} }(i['foo']
)。但是3
不必从字典中获取键,它可以返回所需的任何值。在这里它返回key
,所以结果是从8减去后其值最小的数字。