2017-04-12 90 views
1

我正在使用python,并从CSV文件中读出一列。我通过分组将它们保存在一个数组中。这个数组看起来像这样:Python从第一个数组开始第二个数组

[1, 5, 10, 15, 7, 3] 

我想创建第二个数组,其中我把该数组的数量,并与以前的值的总和。因此,在这种情况下,我想有以下的输出:

[1, 6, 16, 31, 38, 41] 

我的代码如下:

import csv 
import itertools 

with open("c:/test", 'rb') as f: 
    reader = csv.reader(f, delimiter=';') 

    data1 = [] 
    data2 = [] 

    for column in reader: 
     data1.append(column[2]) 

    results = data1 
    results = [int(i) for i in results] 
    results = [len(list(v)) for _, v in itertools.groupby(results)] 
    print results 

    data2.append(results[0]) 
    data2.append(results[0]+results[1]) 
    data2.append(results[0]+results[1]+results[2]) 
    print data2 

所以我可以做手工制作的阵列,但是这要花很多的时间,可能不是最好的办法。那么做这样的事情最好的方法是什么?

+1

的可能的复制[如何找到号码的列表中的累积和?(HTTP://计算器.com/questions/15889131/how-to-find-the-cumulative-sum-of-numbers-in-a-list) – mkrieger1

回答

1
a = [1, 5, 10, 15, 7, 3] 
b = [a[0]] 
for i in range(1, len(a)): 
    b.append(b[-1]+ a[i]) 

一个是从你的.csv列。 b是一个已经有一个值的列表,它是第一项a。然后我们从开始循环a,我们将其后续值添加到最后一项b并将其附加到b

3

您正在寻找列表的累计总和。最简单的方法是让numpy这样做。

>>> import numpy as np 
>>> np.cumsum([1, 5, 10, 15, 7, 3]) 
array([ 1, 6, 16, 31, 38, 41]) 
+0

愚蠢的问题,为什么在'6'之前有两个空格? –

+0

这就是我的REPL决定如何打印它。 – timgeb

+0

事情是,我也是,它没有任何意义 –

0

使用你的代码的对象,你找会是这样的:

from __future__ import print_function 

import csv 
import itertools 

""" 
with open("c:/test", 'rb') as f: 
    reader = csv.reader(f, delimiter=';') 
    for column in reader: 
     data1.append(column[2]) 
""" 

data1 = [1, 5, 10, 15, 7, 3] 

results = [data1[0]] 

for i in range(1, len(data1)): 
    results.append(results[i-1] + data1[i]) 

print(data1, results) 
相关问题