使用reduce来解决此问题的麻烦

时间:2017-03-27 20:44:26

标签: python

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,是不是正确的格式?减少(函数,序列)。不知道我在这里做错了什么

2 个答案:

答案 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
>>>