说我有一个函数:
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
对象(即使事实证明为空,也可以正常工作(。