如何在循环[python]中的每个索引元素中累积和?

时间:2018-11-30 11:31:41

标签: python list dictionary

循环遍历数字列表。我需要使用map来累加另一个列表的element [0]中所有element [0]的总和,element [1]中所有element [1]的总和。

result_list = []
sub1 = sub2 = sub3 = 0 #these 3 should be only indexes 0,1,2 of list above
for item in r:        
    l = item.split(';') # originally l = '34;56;78'
    q = list(map(float,l)) # q is the list of  3 elements

    #instead of code below I want to have smth like
    # result_list = list(map( sum( q(item), result_list)
    sub1 += q[0]
    sub2 += q[1]
    sub3 += q[2]

输入:

l = [['1;2;3'], ['10;20;30'], ['12;34;56']]

result_list必须将每个列表中所有元素[0]的总和汇总到result_list [0]。 输出

result_list[0] = 1+ 10 + 12 
result_list[1] = 2 + 20 + 34
result_list[2] = 3 + 30 + 56

r是这个,我省略名称并计算每个“列”的平均值。

Bawerman;55;79;50
Baldwin;83;62;72
Owen;94;86;65
Watson;92;79;100
Clifford;33;99;47
Murphy;94;87;53
Shorter;83;61;61
Bishop;27;89;41

5 个答案:

答案 0 :(得分:1)

一个班轮可以完成这项工作:

如果您需要先用数字解析字符串:

l = [[int(i) for i in e[0].split(';')] for e in l] 

然后,只需:

result = map(sum, zip(*l))

答案 1 :(得分:1)

您可以执行以下操作,假设l的每个元素都是一个字符串的列表:

l = [['1;2;3'], ['10;20;30'], ['12;34;56']]
numbers = (map(float, e.split(';')) for e, in l)
result = [sum(n) for n in zip(*numbers)]
print(result)

输出

[23.0, 56.0, 89.0]

答案 2 :(得分:1)

这是一种方法。

例如:

l = [["1;2;3"], ["10;20;30"], ["12;34;56"]]
result_list = []

l = [list(map(float, j.split(";"))) for i in l for j in i]
for i in zip(*l):
    result_list.append(sum(i))
print(result_list)

输出:

[23.0, 56.0, 89.0]

答案 3 :(得分:1)

csv.reader + zip + statistics.mean

  

我省略名称并计算每个“列”的平均值

您不需要从数据中构建大量的列表。您可以使用迭代器,并使用zip进行序列解压缩。要计算平均值,可以使用statistics.mean

from io import StringIO
from statistics import mean
import csv

x = StringIO("""Bawerman;55;79;50
Baldwin;83;62;72
Owen;94;86;65
Watson;92;79;100
Clifford;33;99;47
Murphy;94;87;53
Shorter;83;61;61
Bishop;27;89;41""")

# replace x with open('file.csv', 'r')
with x as fin:
    reader = csv.reader(x, delimiter=';')
    zipper = zip(*reader)
    next(zipper)  # ignore labels
    res = [mean(map(float, x)) for x in zipper]

print(res)

# [70.125, 80.25, 61.125]

答案 4 :(得分:-1)

使用列表理解: [sum(sub_list) for sub_list in l]