你能解释一下这个python代码吗?

时间:2018-08-23 09:59:32

标签: python python-3.x list indexing

min(range(len(a)), key=lambda i: abs(a[i]-11.5))

我听不懂。请帮助我。

3 个答案:

答案 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标准库大大减少了键入代码的需求