"Float" 在 python2 中应用 reduce + sum 时对象不可迭代
"Float" object is not iterable when applying reduce + sum in python2
我想将 reduce(sum, iterable)
应用于浮点数列表
flist = [0.2, 0.06, 0.1, 0.05, 0.04, 0.3]
.
print list(reduce(sum, flist))
returns
TypeError: 'float' object is not iterable
为什么,当 flist
是一个可迭代对象时?
实际问题出在 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's take on its use。此外,reduce
已移至 Python 3.x 中的 functools
模块。
您可以使用 reduce 如下,它会汇总 flist 中的所有元素:
reduce(lambda x,y: x+y,flist)
这给你 0.75。
在这种特殊情况下,您不需要 reduce 但也可以只使用
sum(flist)
我想将 reduce(sum, iterable)
应用于浮点数列表
flist = [0.2, 0.06, 0.1, 0.05, 0.04, 0.3]
.
print list(reduce(sum, flist))
returns
TypeError: 'float' object is not iterable
为什么,当 flist
是一个可迭代对象时?
实际问题出在 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's take on its use。此外,reduce
已移至 Python 3.x 中的 functools
模块。
您可以使用 reduce 如下,它会汇总 flist 中的所有元素:
reduce(lambda x,y: x+y,flist)
这给你 0.75。
在这种特殊情况下,您不需要 reduce 但也可以只使用
sum(flist)