python - 我无法弄清楚以下代码是如何工作的?
问题描述
有人可以解释为什么ref_len
=9
在它运行之后,以及下面显示的代码中的第二行是如何工作的吗?
ref_len_list = [9,9,5,9]
ref_len = min(ref_len_list, key=lambda x:abs(x-8))
解决方案
该行:
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
s 和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)
推荐阅读
- grafana - 无法在 Loki 中获取日志记录
- java - Spring配置只授权一个URL
- c# - 视图状态 MAC 验证失败。至少一个月内没有更改代码
- python - 如何获取python抓取的json结果
- c# - System.ArgumentOutOfRangeException: '提供的 resourceId 不是有效的 Socrata (4x4) 资源标识符
- json - [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] 的问题未处理的异常:类型“String”不是“index”类型“int”的子类型
- javascript - 在 NextJS 中延迟加载组件而不使用 `next/dynamic`
- emacs - How to get declaration order AUTOINST with emacs verilog-mode?
- asp.net - 缓慢的 ASP.NET 响应。IIS 失败请求日志中的 VIRTUAL_MODULE_UNRESOLVED
- javascript - 在创建之前使用 Sequelize 模型验证来验证 JSON 对象