2016-12-30 5 views
0

Учитывая следующий список:Python Running Sum в списке

a=[1,2,3] 

Я хотел бы создать новый список, где каждое число является суммой его и значения перед ним, как это:

result = [1,3,6] 

Логика:

1 не имеет предшествующего значения, поэтому оно остается неизменным.

3 из (1) добавляются к значению второго числа в списке первого значения (2)

6 из суммы 1 и 2 из первых двух элементов, а также третьего значения от 3.

Заранее благодарим!

ответ

2

Если Вы хотели бы Numpy решения

from numpy import cumsum 
result = list(cumsum(a)) 
+0

Я понял, что это намного быстрее, чем встроенная версия Python. –

6

Python имеет itertools.accumulate именно для этой цели:

>>> from itertools import accumulate 
>>> a=[1,2,3] 
>>> list(accumulate(a)) 
[1, 3, 6] 
+0

Вы ответили на вопрос, а я до сих пор форматирование моего ответа :(. –

1

Python имеет функцию для этого.

import itertools 

result = list(itertools.accumlate([1, 2, 3])) 

Python itertools эффективно решает некоторые проблемы, вы должны потратить некоторое время и прочитать их. Код

https://docs.python.org/3/library/itertools.html

0

Авинаша Raj не работает правильно.

a = [1,2,3] 
b = [sum(a[:(i+1)]) for i, j in enumerate(a)] 
print(b) 

Отредактированные на основе @Avinash Раджа

+0

да, очень более простой '[sum (a [: i + 1]) для i, j в перечислении (a)] ' –

1

Как насчет обычного цикла?

a = [1,2,3] 
result = [] 
s = 0 
for item in a: 
    s += item 
    result.append(s) 

print(result) 
0

Существует около ста различных способов сделать такую ​​суммарную сумму. В зависимости от того, на что вы на самом деле хотите использовать результат, менее очевидное или менее универсальное решение может быть более эффективным по времени или памяти, хотя простым решением ниже является O (1) с точки зрения памяти и O (N) во времени.

Самый простой процедурный подход практически во всех императивных языках программирования идет что-то вроде этого:

csum=0 
result=[] 
for val in a: 
    csum += val 
    result.append(csum) 

Стандартная библиотека Питон также включает в себя функцию, чтобы сделать именно это: itertools.accumulate.

import itertools 
result = list(itertools.accumulate(a)) 
+1

должен быть:' result.append (csum) ' – user4421975

+0

Derp ... Исправлено, спасибо. –

0

попробовать это ..

def running_sum(a): 
    tot = 0 
    for item in a: 
    tot += item 
    yield tot 

a = [1,2,3,4] 
print list(running_sum(a)) 
Смежные вопросы