如果在一个元素的名称中有一个chnage,是否有某种方式迭代列表并对列进行求和。
[['a','1'],['a','2'],['a','3']....on and on, ['b','1'],['b','2'],['b','3']...
on and on....]]
因此,当[a]处有'a'时,对索引1列求和,然后如果[0]改变(即'b'),则再次开始求和。所以我猜它可能是一种while循环,但是无法弄明白。我在思考(但显然是错误的)......
for row in list:
for i in row: #iterate through each row
var = i[0] #assign first index to 'var'
while True: #while var is one name
for num in lst:
sum(float(num[1]) for num in lst if num[1]) #add column [1]
....then something else...
一些事情 - 我不想指定元素名称('a','b'..)因为它会改变。 元素类型的数量也可能会发生变化 - 有时只是'a','b',有时是'c','d','e'等等 每次第一个元素发生变化时,我都需要以某种方式存储求和值
这可能不使用dict或模块等吗?
答案 0 :(得分:2)
使用itertools.groupby()
对商品进行分组:
from itertools import groupby
from operator import itemgetter
sums = [(key, sum(float(i[1]) for i in group))
for key, group in groupby(row, key=itemgetter(0))]
这会生成('a', 10.0)
等值的列表。
groupby()
工具将您的输入序列拆分为组,其中下一组由key
可调用确定;当key
可调用返回的值更改时,将生成一个新组。
答案 1 :(得分:1)
这是itertools.groupby()
的完美用例,它允许您对一个可迭代的元素进行分组。它可能看起来像这样:
from itertools import groupby
from operator import itemgetter
data = [['a','1'],['a','2'],['a','3'], ['b','1'],['b','2'],['b','3'],['b','4']]
sums = [(k, sum(float(v) for k, v in g)) for k, g in groupby(data, key=itemgetter(0))]
结果:
>>> sums
[('a', 6.0), ('b', 10.0)]
答案 2 :(得分:1)
在这种情况下,由于您要添加内容,因此可以使用计数器
>>> from collections import Counter
>>> L = [['a', '1'], ['a', '2'], ['a', '3'], ['b', '1'], ['b', '2'], ['b', '3']]
>>> c = Counter()
>>> for i,j in L:
... c.update({i: float(j)})
...
>>> c
Counter({'a': 6.0, 'b': 6.0})