2017-04-12 196 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) 
相關問題