sum_of_squares = lambda L: sum([x**2 for x in L])
#reduce(sum_of_squares,[1])
assert sum_of_squares([2,3,4]) == 29
assert sum_of_squares([]) == 0
assert sum_of_squares([1]) == 1
我所评论的是我尝试使用reduce,是不是正确的格式?减少(函数,序列)。不知道我在这里做错了什么
答案 0 :(得分:1)
您是否尝试将sum_of_squares
实施为reduce
。我不确定您尝试使用reduce(sum_of_square, ...)
:
如果是前者那么你可以实现它:
>>> import functools as ft
>>> import operator as op
>>> sum_of_squares = lambda L: ft.reduce(op.add, map(lambda x: x**2, L), 0)
>>> assert sum_of_squares([2,3,4]) == 29
>>> assert sum_of_squares([]) == 0
>>> assert sum_of_squares([1]) == 1
但是sum(x**2 for x in L)
完全一样。
答案 1 :(得分:0)
reduce
将采用两个元素,应用函数,获取结果并应用于下一个元素,依此类推,直到列表末尾。因此,在您的情况下,答案将是不正确的。
您可能希望将方形函数映射到列表,然后按如下方式求和,
l = [2,3,4]
print sum((map(lambda x : x**2 ,l)))
>>>
29
>>>