Python 运行 列表中的总和
Python Running Sum in List
给定以下列表:
a=[1,2,3]
我想生成一个新列表,其中每个数字都是它和它前面的值的总和,如下所示:
result = [1,3,6]
逻辑:
1 没有前面的值,所以它保持不变。
3 是从第一个值 (1) 加上列表中第二个数字的值 (2)
6是前两个元素1和2之和加上第三个值3。
提前致谢!
Python 3 有 itertools.accumulate
正是为了这个目的:
>>> from itertools import accumulate
>>> a=[1,2,3]
>>> list(accumulate(a))
[1, 3, 6]
Python 有这个功能。
import itertools
result = list(itertools.accumlate([1, 2, 3]))
Python itertools 解决了一些问题,你应该花点时间仔细阅读。
Avinash Raj 的代码无法正常工作。
a = [1,2,3]
b = [sum(a[:(i+1)]) for i, j in enumerate(a)]
print(b)
根据@Avinash Raj 编辑
普通循环怎么样?
a = [1,2,3]
result = []
s = 0
for item in a:
s += item
result.append(s)
print(result)
大约有一百种不同的方法可以计算这种累加和。根据您实际想要使用结果的目的,不太明显或不太通用的解决方案 可能 更节省时间或内存——尽管下面的简单解决方案是 O(1 ) 在内存方面和 O(N) 在时间方面。
几乎所有命令式编程语言中最直接的过程方法都是这样的:
csum=0
result=[]
for val in a:
csum += val
result.append(csum)
Python 标准库还包含一个函数来执行此操作:itertools.accumulate
.
import itertools
result = list(itertools.accumulate(a))
如果你想要一个 numpy 解决方案
from numpy import cumsum
result = list(cumsum(a))
试试这个..
def running_sum(a):
tot = 0
for item in a:
tot += item
yield tot
a = [1,2,3,4]
print list(running_sum(a))
给定以下列表:
a=[1,2,3]
我想生成一个新列表,其中每个数字都是它和它前面的值的总和,如下所示:
result = [1,3,6]
逻辑:
1 没有前面的值,所以它保持不变。
3 是从第一个值 (1) 加上列表中第二个数字的值 (2)
6是前两个元素1和2之和加上第三个值3。
提前致谢!
Python 3 有 itertools.accumulate
正是为了这个目的:
>>> from itertools import accumulate
>>> a=[1,2,3]
>>> list(accumulate(a))
[1, 3, 6]
Python 有这个功能。
import itertools
result = list(itertools.accumlate([1, 2, 3]))
Python itertools 解决了一些问题,你应该花点时间仔细阅读。
Avinash Raj 的代码无法正常工作。
a = [1,2,3]
b = [sum(a[:(i+1)]) for i, j in enumerate(a)]
print(b)
根据@Avinash Raj 编辑
普通循环怎么样?
a = [1,2,3]
result = []
s = 0
for item in a:
s += item
result.append(s)
print(result)
大约有一百种不同的方法可以计算这种累加和。根据您实际想要使用结果的目的,不太明显或不太通用的解决方案 可能 更节省时间或内存——尽管下面的简单解决方案是 O(1 ) 在内存方面和 O(N) 在时间方面。
几乎所有命令式编程语言中最直接的过程方法都是这样的:
csum=0
result=[]
for val in a:
csum += val
result.append(csum)
Python 标准库还包含一个函数来执行此操作:itertools.accumulate
.
import itertools
result = list(itertools.accumulate(a))
如果你想要一个 numpy 解决方案
from numpy import cumsum
result = list(cumsum(a))
试试这个..
def running_sum(a):
tot = 0
for item in a:
tot += item
yield tot
a = [1,2,3,4]
print list(running_sum(a))