首页 > 解决方案 > 如何对两个迭代器“列表”中的值求和?

问题描述

我有两个迭代器,它们由一个看起来像这样的“列表”组成:

[[1, 2, 3, 4, 5, 6],
 [2, 4, 6, 8, 10, 12],
 [3, 5, 8, 6, 1, 19],
 [5, 9, 1, 9, 4, 6]]

for或者,如果我只是对它们运行一个循环,这就是它的样子。

迭代器而不是列表本身的原因是由于内存。真正的列表/数组要大得多,这只是一个例子。我需要做的是获取一个列表并将列表内每个索引的列求和以获取所有“外部”索引,然后将它们添加到两个列表中,例如sum(list1) + sum(list2).

所以基本上:

list1:                   list2:
[[1, 2, 3, 4, 5, 6],     [[5, 4, 3, 2, 1, 9],
 [2, 4, 6, 8, 10, 12],    [6, 3, 8, 1, 1, 6],  
 [3, 5, 8, 6, 1, 19],     [1, 3, 2, 8, 2, 3],
 [5, 9, 1, 9, 4, 6]]      [5, 2, 9, 4, 2, 5]]
          =>                       =>
 [11, 20, 18, 20, 43]     [17, 12, 22, 15, 23]
                       =>
              [28, 32, 40, 35, 66]

所以我遍历这两个列表,对于每个列表,我需要对列求和,然后最后将最后两个列表的列合并为一个组合列表。

如果只是常规列表,我知道如何执行此操作,但由于这是迭代器/生成器(不知道正确的术语),我真的不确定它是如何完成的。

标签: pythoniterator

解决方案


您可以使用它来对每个求和,而无需将所有内容加载到内存中:

def sumIter(iter):
    result = [0, 0, 0, 0, 0, 0] #Assuming there are always 6 items in each sub-list
    for list in iter:
       result = [(result[i] + list[i]) for i in range(6)]

进而:

sum1 = sumIter(iter1)
sum2 = sumIter(iter2)
result = [(sum1[i] + sum2[i]) for i in range(6)]

推荐阅读