Python首先创建第二个数组

时间:2017-04-12 11:05:45

标签: python arrays csv

我正在使用python,我从CSV文件中读出一列。我通过对它们进行分组来保存数组中的值。这个数组看起来像这样:

[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

所以我可以通过手动创建数组,但这需要花费很多时间,而且可能不是最好的方法。那么做这样的事情的最佳方法是什么?

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分: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 < / em>的

答案 2 :(得分: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)