用 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 迭代器的迭代器。
- 展平以仅获得一个 int 的迭代器
- 对这个迭代器求和
我们可以为此使用 Pyterator(免责声明:我是作者)。
from pyterator import iterate
iterate(outer_iter).flatten().sum()
我已经被这个数据结构困住了一段时间了:
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 迭代器的迭代器。
- 展平以仅获得一个 int 的迭代器
- 对这个迭代器求和
我们可以为此使用 Pyterator(免责声明:我是作者)。
from pyterator import iterate
iterate(outer_iter).flatten().sum()