我正在练习生成器,我想知道为什么下面的代码不打印16对而只打印4对。在
def range_generator_function(my_range):
for i in my_range:
yield i
gen1=range_generator_function(range(1,5))
gen2=range_generator_function(range(1,5))
def pairs_generator_function(gen1,gen2):
for it1 in gen1:
for it2 in gen2:
yield [it1,it2]
my_gen = pairs_generator_function(gen1,gen2)
for it in my_gen:
print(it)
输出是
^{pr2}$而我期望的输出是
^{3}$
你在第一次通过内环后耗尽了第二代。该流中不再有任何内容,因此
it1
的其他三个值没有任何可与之配对的值。每次通过时都需要重新启动gen2
。考虑使用itertools.tee
来克隆更多副本。在您得到的输出是由于在第二次迭代中,生成器
gen2
已经用尽。在您可以在循环之前用它生成一个
list
来存储它的输出,或者在每次迭代中用itertools.tee
来复制它。前者不能处理无限的生成器,但是在实现后者之前,让我指出您实际上是在重新实现itertools.product
。在实际输出正确。您的
gen2
实例已被第一个内部循环完全耗尽:在随后的迭代中,再次迭代
gen2
为空。在相关问题 更多 >
编程相关推荐