我在弄清楚以下代码的工作方式时遇到了麻烦?

时间:2019-05-05 14:42:30

标签: python list

有人可以解释为什么ref_len = 9运行后,以及下面显示的代码中的第二行如何工作吗?

ref_len_list = [9,9,5,9]
ref_len = min(ref_len_list, key=lambda x:abs(x-8))

3 个答案:

答案 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)。如果此列表中同时有97s,它将仅给出其中的第一个。

所以:

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减去后其值最小的数字。