繁体   English   中英

使用 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

我正在努力“翻译”代码。

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

from itertools import chain

sum(chain.from_iterable(outer_iter))

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

这是 int 的迭代器的迭代器。

  1. 展平以获取 int 的迭代器
  2. 总结这个迭代器

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

from pyterator import iterate

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM