作为一个班轮可能的增长金额一览?

时间:2014-02-26 10:46:58

标签: python functional-programming generator list-comprehension

我想总结一个可迭代的整数,并为每个元素产生增长的总和。使用迭代编程这是一件简单的事情:

def growingSum(elements):
  sum = 0
  for element in elements:
    sum += element
    yield sum

但是可以在不使用变量的情况下以功能性的方式完成,所以可能作为使用理解的单线程吗?

2 个答案:

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

在任何情况下,使用此类代码的人都将被枪杀。这是一次大规模的破解,是对可读性和常识的冒犯,没有任何正当理由或上诉的迹象。