使用lambda函数的平方和

时间:2017-02-21 02:22:21

标签: python lambda

我正在考虑采用不同的方法来获取python中的平方和。我发现以下使用列表推导工作:

def sum_of_squares(n):
    return sum(x ** 2 for x in range(1, n))

但是,使用lambda函数时,以下内容不计算:

def sum_of_squares_lambda(n):
    return reduce(lambda x, y: x**2 + y**2, range(1, n))

为什么会这样?

4 个答案:

答案 0 :(得分:2)

你只应该对每个连续的元素进行平方。 x**2 + y**2平均运行总计(x)以及每个连续元素(y)。将其更改为x + y**2,您将获得正确的结果。请注意,正如评论中所提到的,这也需要适当的初始值,因此您应该将0作为可选的第三个参数传递。

>>> sum(x ** 2 for x in range(5,15))
985
>>> reduce(lambda x, y: x + y**2, range(5,15))
965
>>> reduce(lambda x, y: x + y**2, range(5,15), 0)
985

答案 1 :(得分:2)

考虑一下$ git whatchanged --since="1 day ago" -p $ git whatchanged --since="1 day ago" -p <file> # see changes for a specific file only 的作用。它接受一个调用的输出,并在再次调用同一函数时将其用作第一个参数。所以想象n是4.假设你叫你的lambda reduce。然后你正在做f。这相当于:

f(f(1, 2), 3)

因为你的lambda的第一个参数是平方的,你的第一个平方和将在下一次调用时再次平方,然后该和将在下一次再次平方,依此类推。

答案 2 :(得分:0)

假设您插入4:

1^2 + 2^2 = 5 (you then take this result and put it back in the lambda)
5^2 + 3^2  = 34 (for reference the correct answer is 14)

它也会在lambda

中对“前一个”和求平方

(您还有一个问题,在您的范围调用中应为n+1。)

答案 3 :(得分:-2)

(对于python 3用户)

from functools import reduce

能够使用reduce

其次,你的函数sum_of_squares_lambda将无法按预期的方式工作,因为reduce除了第一个和最后一个参数之外每个参数需要两次(而不是一次)。