2016-01-06 140 views
1

所以我需要做一个函数,将数字的平方加起来直到n,只使用一个返回值。Python:列表函数和lambda表达式

我已经试过:

from functools import reduce 

    def soma_quadrados(n): 
     return sum(list(reduce(lambda x: x**2, list(range(1,n+1))))) 

这给错误:lambda() takes 1 positional argument but 2 were given

我也试过

return sum(list(reduce(lambda x: x**2, n))) 

这给错误:reduce() arg 2 must support iteration

应该是什么我做? 在此先感谢

+1

为什么你认为你需要“减少”? – bereal

+0

@bereal它也被要求,忘记提及。减少,过滤或映射 – Mary09

回答

3

reduce()传递两个参数:到目前为止积累的结果和下一个值。您的lambda不接受结果参数(第一个)。

如果你想制作完全平方数的总和,使用sum()与发电机的表达:

sum(i ** 2 for i in range(1, n + 1)) 

或使用map()到位发电机表达的映射整数其方:

sum(map(lambda i: i ** 2, range(1, n + 1))) 

如果必须使用reduce(),有它总和:

reduce(lambda r, i: r + i ** 2, range(1, n + 1), 0)