请有人解释一下为什么ref_len = 9在运行之后,以及下面代码中的第二行是如何工作的?
ref_len_list = [9,9,5,9]
ref_len = min(ref_len_list, key=lambda x:abs(x-8))发布于 2019-05-05 14:45:40
这句话:
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)发布于 2019-05-05 14:46:28
第二行代码,ref_len = min(ref_len_list, key=lambda x:abs(x-8))简单地查看第一行代码,ref_len_list = [9,9,5,9]并找到最接近8的值,它只是从满足代码的列表中选择一个项。
发布于 2019-05-05 14:51:33
min从列表中选择最小值。如果没有给出key参数,它只是使用值本身来确定“最小”是什么(即从数字列表中可以看出最小值是什么)。给定一个key参数,它使用该函数获取它应该考虑的列表中每个项的值。这种情况通常意味着:
[{'foo': 3, 'bar': 'baz'}, {'foo': 4}]min不能只知道它在这里应该使用什么值,所以您可以执行min(lst, key=lambda i: i['foo']),它返回{'foo': 3, 'bar': 'baz'},因为i['foo'] (3)的值是最低的。但是key不需要从dict中获得密钥,它可以返回它想要的任何值。在这里,它返回abs(x - 8),因此结果是从8减去其值最小的数字。
https://stackoverflow.com/questions/55993136
复制相似问题