循环遍历数字列表。我需要使用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
答案 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]