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

2024-04-16 14:14:17 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我不明白。请帮帮我。你知道吗


Tags: lambdakeylenrangeabsmin帮帮我
3条回答

如果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标准库大大减少了输入代码的需要

Python内置的^{}返回某个iterable中的最小参数。然而,由于python2.5,它还需要一个key参数,这个函数用来计算iterable中的元素。你知道吗

传递给key的参数是如何计算集合中的每个元素x,如argument(x)。传递一个lambda,一个匿名函数,它计算lambda i: abs(a[i]-11.5),也就是说,对于每个索引,它在该索引处取a中的值,并计算a[i] - 11.5的绝对值。这是因为您将a的索引传递给min函数,因为range(len(a))正是该集合(它是从0len(a)的范围,以1为步)。你知道吗

综上所述,您得到的是a中元素的索引,它在绝对距离上最接近11.5。你知道吗

min返回iterable中的最小值。您可以选择提供一个key函数,在进行比较之前应用于iterable。你知道吗

这里iterable是一个生成器,它将数字0返回到iterable的长度a。你知道吗

应用于iterable的每个元素的键函数获取该元素并使用它索引到a。然后从这个值减去11.5,取绝对值。你知道吗

总的来说,它返回a元素的索引,最接近11.5。你知道吗

相关问题 更多 >