使用map-reduce / itertools对嵌套的iterables进行求和

时间:2017-12-01 09:45:07

标签: python python-3.x functional-programming mapreduce 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

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

1 个答案:

答案 0 :(得分:2)

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

from itertools import chain

sum(chain.from_iterable(outer_iter))

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

相关问题