首页 > 解决方案 > 我无法弄清楚以下代码是如何工作的?

问题描述

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

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

标签: pythonlist

解决方案


该行:

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). 如果这个列表中同时存在9s 和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)

推荐阅读