列表中每个元素的列表中的总和列

对于列表列表,有一些方法可以为列表中的每个特定元素添加一列(使用python)。一个例子...


l=[['A1','1','2'],['A1','1','2'],['A1','3','3'],['B1','1','2'],['B1','5','5'],[...]]

现在仅将A1,B1等的第一列求和,并获得所需的输出为...


sumA1=5

sumB1=6

sumC1.......

现在列表值可能会更改,所以我不想引用“ A1,B1 ..”。它可能变成A3,B4...。所以最好的方法是根据index [0]求和(列的数量/类型不会改变)。我拥有的atm代码只是一个简单的列表解析,无论A1,B1等如何,都对第1列的所有内容进行求和。


for i in l:

    total = sum(float(i[1]) for i in l if i[1])

考虑到每个“ A1,B1 ..”总会有相同数量的项目,比如说10,另一种选择是将i [1]中的每10个数字相加,但是我需要能够说'前10个数字的和是A1,前10个数字的和是B2,依此类推。感谢帮助


慕侠2389804
浏览 188回答 2
2回答

翻翻过去那场雪

将第一列上的项目分组到字典中;一个defaultdict使它容易一些:from collections import defaultdictsums = defaultdict(int)for tup in l:&nbsp; &nbsp; sums[tup[0]] += int(tup[1])defaultdict如果不存在键,只需调用传入的工厂以产生默认值(int在这种情况下,产生0):>>> d = defaultdict(int)>>> d['foo']0演示:>>> l=[['A1','1','2'],['A1','1','2'],['A1','3','3'],['B1','1','2'],['B1','5','5']]>>> from collections import defaultdict>>> sums = defaultdict(int)>>> for tup in l:...&nbsp; &nbsp; &nbsp;sums[tup[0]] += int(tup[1])...&nbsp;>>> sumsdefaultdict(<class 'int'>, {'B1': 6, 'A1': 5})然后打印总和就很简单:for key in sorted(sums):&nbsp; &nbsp; print 'sum{}={}'.format(key, sums[key])如果您的输入列表已排序,请使用itertools.groupby():from itertools import groupbyfrom operator import itemgettersums = {key: sum(int(t[1]) for t in group) for key, group in groupby(l, key=itemgetter(0))}演示:>>> from itertools import groupby>>> from operator import itemgetter>>> {key: sum(int(t[1]) for t in group) for key, group in groupby(l, key=itemgetter(0))}{'B1': 6, 'A1': 5}实际上,有了排序列表,groupby您可以直接切换到打印:for key, group in groupby(l, key=itemgetter(0)):&nbsp; &nbsp; print 'sum{}={}'.format(key, sum(t[1]) for t in group))如果没有外部模块,我只会去字典。这将比以上任何一个选项都要慢:sums = {}for tup in l:&nbsp; &nbsp; sums[tup[0]] = sums.get(tup[0], 0) + int(tup[1])或者,对于已排序的变体:sum, last = 0, l[0][0]for tup in l:&nbsp; &nbsp; key = tup[0]&nbsp; &nbsp; if last != key and sum:&nbsp; &nbsp; &nbsp; &nbsp; print 'sum{}={}'.format(last, sum)&nbsp; &nbsp; &nbsp; &nbsp; sum, last = 0, key&nbsp; &nbsp; sum += int(tup[1])if sum:&nbsp; &nbsp; print 'sum{}={}'.format(key, sum)

一只萌萌小番薯

>>> from collections import defaultdict>>> a = [["a",1,2],["a",2,3],["b",45,2]]>>> my_dict = defaultdict(list)>>> for itm in a:...&nbsp; &nbsp; my_dict[itm[0]].append(itm)...>>> for k,v in my_dict.items():...&nbsp; &nbsp; print "Sum %s:%s"%(k,sum(zip(*v)[1]))...Sum a:3Sum b:45
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python