在Python2中使用reduce + sum时,“Float”对象不可迭代。

4
我希望将reduce(sum, iterable)应用于一个浮点数列表flist = [0.2, 0.06, 0.1, 0.05, 0.04, 0.3]print list(reduce(sum, flist))返回TypeError: 'float' object is not iterable
为什么flist是可迭代的时候会出现这种情况?
2个回答

5
实际问题出在sum函数上。它只接受可迭代对象,而不是两个单独的值。例如,
>>> sum(1, 2)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: 'int' object is not iterable
>>> sum([1, 2])
3

因此,你不能在这里使用sum,相反,你可以使用自定义的 lambda 函数或者operator.add,像这样:

>>> from operator import add
>>> reduce(add, flist, 0.0)
0.75
>>> reduce(lambda a, b: a + b, flist, 0.0)
0.75

注意: 在使用 reduce 之前,您可能需要阅读BDFL 对其使用的看法。此外,在 Python 3.x 中,reduce 已被移动到 functools 模块中。


是的,抱怨的是sum,因此reduce(mul, flist)不会产生这种错误。 - minerals

1
您可以按照以下方式使用reduce,它将对flist中的所有元素求和:
reduce(lambda x,y: x+y,flist)

这个给你0.75。

在这种特殊情况下,您不需要约简,只需使用即可。

sum(flist)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接