我想总结一个可迭代的整数,并为每个元素产生增长的总和。使用迭代编程这是一件简单的事情:
def growingSum(elements):
sum = 0
for element in elements:
sum += element
yield sum
但是可以在不使用变量的情况下以功能性的方式完成,所以可能作为使用理解的单线程吗?
答案 0 :(得分:3)
在Python3.2 +上,您可以使用itertools.accumulate
:
>>> from itertools import accumulate
>>> list(accumulate(range(10)))
[0, 1, 3, 6, 10, 15, 21, 28, 36, 45]
答案 1 :(得分:1)
从技术上讲,这个生成器表达式有效:
((globals().__setitem__('__acc', globals()['__acc'] + x), globals()['__acc'])[1] for x in (globals().__setitem__('__acc', 0), iterable)[1])
(我不确定这是否可移植。它可能依赖于实现定义的行为。)
或者,如果可以引入一个本地:
v = [0]
((v.append(v.pop() + x), v[0])[1] for x in iterable)
在任何情况下,使用此类代码的人都将被枪杀。这是一次大规模的破解,是对可读性和常识的冒犯,没有任何正当理由或上诉的迹象。