В Python 3, вы будете использовать itertools.accumulate()
:
from itertools import accumulate
array = list(accumulate(rand(100)))
накапливались дает бегущего результат суммирования значений входного Iterable, начиная с первого значения:
>>> from itertools import accumulate
>>> list(accumulate(range(10)))
[0, 1, 3, 6, 10, 15, 21, 28, 36, 45]
Вы можете передать другую операцию в качестве второго аргумента; это должно быть вызываемым, которое берет накопленный результат и следующее значение, возвращая новый накопленный результат. operator
module очень помогает в предоставлении стандартных математических операторов для такого рода работ; вы можете использовать его, чтобы произвести ход умножения результат, например:
>>> import operator
>>> list(accumulate(range(1, 10), operator.mul))
[1, 2, 6, 24, 120, 720, 5040, 40320, 362880]
Функциональность достаточно легко портировать на более старых версиях (Python 2, или Python 3.0 или 3.1):
# Python 3.1 or before
import operator
def accumulate(iterable, func=operator.add):
'Return running totals'
# accumulate([1,2,3,4,5]) --> 1 3 6 10 15
# accumulate([1,2,3,4,5], operator.mul) --> 1 2 6 24 120
it = iter(iterable)
total = next(it)
yield total
for element in it:
total = func(total, element)
yield total
Вы используете NumPy случайно? Я знаю, что numpy имеет хорошую функцию для чего-то подобного. – arshajii
Я бы не использовал понимание списка - элементы должны быть независимы друг от друга, и в этом случае они не являются. – Izkata
Почему вы хотите превратить это в понимание списка? Гораздо читабельнее держать это в отдельном цикле. Сделайте это 'array = [0]', 'для i в rand (100): возможно, array.append (i + array [-1])'. –