用 map-reduce/itertools 对嵌套的迭代求和

summing nested iterables with map-reduce/itertools

我已经被这个数据结构困住了一段时间了:

iter([iter([1,0]),iter([1,1]),iter([0,0])])

我想使用 map-reduce/itertools 求最内层元素的总和。

我可以使用 for 循环很快得到答案:

outer_iter = iter([iter([1,0]),iter([1,1]),iter([0,0])])

for inner_iter in outer_iter:
    for inner_list in inner_iter:
        total = total + inner_list

我正在努力 "translate" 代码。

如果数据嵌套两层深,我们可以使用chain函数将迭代器连接在一起,然后让sum(..)计算迭代的总和。所以:

<b>from itertools import chain</b>

sum(<b>chain.from_iterable(</b>outer_iter<b>)</b>)

chain.from_iterable 将可迭代对象的可迭代对象作为输入,并将其转换为可迭代对象,一次从可迭代对象中懒惰地获取元素。我们可以在 chain 上使用可迭代解包,但如果外部可迭代是一个无限列表,算法将卡住(最终 运行 内存不足)。

这是 int 迭代器的迭代器。

  1. 展平以仅获得一个 int 的迭代器
  2. 对这个迭代器求和

我们可以为此使用 Pyterator(免责声明:我是作者)。

from pyterator import iterate

iterate(outer_iter).flatten().sum()