Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用map-reduce/itertools对嵌套的iterables求和_Python_Python 3.x_Functional Programming_Mapreduce_Itertools - Fatal编程技术网

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

Python 使用map-reduce/itertools对嵌套的iterables求和,python,python-3.x,functional-programming,mapreduce,itertools,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: t

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

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
我正在努力“翻译”代码。

如果数据嵌套在两层深处,我们可以使用
函数将iterable连接在一起,然后让
求和(…)
计算iterable的和。因此:

from itertools import chain

sum(chain.from_iterable(outer_iter))
来自itertools导入链的

总和(链自可数(外链))

chain.from_iterable
将iterable中的一个iterable作为输入,并将其转换为一个iterable,该iterable一次惰性地从iterable中获取一个元素。我们可以在
链上使用iterable解包
,但是如果外部iterable是一个无限列表,那么算法就会陷入困境(最终耗尽内存)。

iterable可以嵌套任意深度,还是只嵌套两层?我在玩这段代码时注意到:@lainglo:是的,迭代器确实被消耗掉了。但实际上没有一种方法不使用迭代器。您可以使用
tee
等,它将从一个迭代器中生成两个迭代器(通过使用共享内存)