应用地图功能时访问发电机项目



说我有一个函数:

def plus(x):
    return [x+1, x+2]

以及一些我想将上述功能应用于:

的数据
 data=(i for i in range(5)) #large, don't fit in ram

我正在浏览地图功能的结果。当地图功能的结果符合某些类别时,我正在尝试获取数据变量的值:

for result in map(plus, data) or []:
     if result >3:
        print(f"{result} -xx")

如何访问符合此条件的发电机项目(上面标记为XX(?我能想到的一种方法是将加号函数中的变量x附加回返回的列表,但这似乎是多余的。

itertools.tee函数使其类似于这种实用性(并且将其用于并行迭代是它实际保存内存的唯一情况,因此这是它的完美案例(:

import itertools
# Make two iterators that will each produce the original data once
# When the value has been produced by one iterator, it is cached internally;
# when the second iterator produces it, it's discarded
data, data2 = itertools.tee(data)
# Iterate original data and mapped data in parallel
for x, result in zip(data, map(plus, data2)):
     if result >3:
        print(f"{result} {x}")

请注意,我删除了or [],因为它可以保证毫无意义。map对象总是真实的,因此您总是会迭代map对象(即使事实证明为空,也可以正常工作(。

最新更新