min(range(len(a)), key=lambda i: abs(a[i]-11.5))
我听不懂。请帮助我。
答案 0 :(得分:1)
Python内置的min
以一些可迭代的方式返回最小参数。但是,从Python 2.5开始,它还接受一个key
参数,该函数用来评估可迭代对象中的元素。
您传递给key
的参数是如何评估集合中每个元素x
的形式,argument(x)
。您传递了一个匿名函数lambda
,该函数将计算lambda i: abs(a[i]-11.5)
,也就是说,对于每个索引,它将在该索引处获取a
中的值,并计算{{1 }}。这是有效的,因为您将a[i] - 11.5
的索引传递给了a
函数,因为min
就是那个集合(它是从range(len(a))
到0
的范围,按len(a)
的步骤操作。)
将所有这些放在一起,得到的是1
中元素的索引,该元素的绝对距离最接近a
。
答案 1 :(得分:0)
min
以迭代形式返回最小值。您可以选择提供一个key
函数,该函数会在进行比较之前应用于迭代器。
这里可迭代的是生成器,它返回数字0到可迭代a
的长度。
应用于iterable的每个元素的键函数接受该元素并将其用于索引到a
中。然后从该值中减去11.5并得出绝对值。
总体来说,这是返回a
元素的索引,该索引最接近11.5。
答案 2 :(得分:0)
如果a
包含至少一个元素,则它等效于以下代码:
def stupid_verbose_imperative_code():
import math
i = 0
result = None
min_key = math.inf
while i < len(a):
key = abs(a[i]-11.5)
if key < min_key:
min_key = key
result = i
i += 1
return result
stupid_verbose_imperative_code()
如您所见,掌握python标准库大大减少了键入代码的需求