首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我很难弄清楚下面的代码是如何工作的?

我很难弄清楚下面的代码是如何工作的?
EN

Stack Overflow用户
提问于 2019-05-05 14:42:30
回答 3查看 56关注 0票数 0

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

代码语言:javascript
复制
ref_len_list = [9,9,5,9]
ref_len = min(ref_len_list, key=lambda x:abs(x-8))
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-05-05 14:45:40

这句话:

代码语言:javascript
复制
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,它只会给出其中的第一个。

所以:

代码语言:javascript
复制
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))可以重写如下:

代码语言:javascript
复制
def func(x):
    return abs(x-8)
票数 1
EN

Stack Overflow用户

发布于 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的值,它只是从满足代码的列表中选择一个项。

票数 0
EN

Stack Overflow用户

发布于 2019-05-05 14:51:33

min从列表中选择最小值。如果没有给出key参数,它只是使用值本身来确定“最小”是什么(即从数字列表中可以看出最小值是什么)。给定一个key参数,它使用该函数获取它应该考虑的列表中每个项的值。这种情况通常意味着:

代码语言:javascript
复制
[{'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减去其值最小的数字。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55993136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档