首页 > 解决方案 > 谁能解释 min([1,2,3,5,6], key=lambda x: abs(x-8)) 背后的逻辑

问题描述

这是我的清单:a = [1, 3, 4, 7, 8, 9, 12, 13, 14]

我想得到最接近的数字5,这是解决方案:

b = min(a, key = lambda x: abs(x-5))

请解释上述行中发生了什么。

标签: python

解决方案


该代码使用min内置函数,但带有key参数。因此,它不返回列表的实际最小元素,而是该键函数最小的元素,即它的行为更像“arg-min”而不是实际的“min”。

key函数中(定义为lambda表达式),abs只是绝对差异,在这种情况下,参数x(列表中的数字)和5.

该行在某种程度上等效于,但比此循环短得多且更具可读性:

a = [1,3,4,7,8,9,12,13,14]
b = min_k = None
for x in a:
    k = abs(x-5)
    if min_k is None or k < min_k:
        b, min_k = x, k

推荐阅读