以下内容从未在Python 3.6中打印任何内容
from itertools import product, count
for f in product(count(), [1,2]):
print(f)
Run Code Online (Sandbox Code Playgroud)
相反,它只是坐在那里燃烧CPU.问题似乎是,product如果迭代器超过无限空间,则永远不会返回迭代器,因为它product首先评估完整的迭代器.鉴于它product应该是一个发电机,这是令人惊讶的.
我本来期望这开始计数(到无穷大),类似于这个生成器的行为(直接从文档中获取):
for tup in ((x,y) for x in count() for y in [1,2]):
print(tup)
Run Code Online (Sandbox Code Playgroud)
但是,当我的发电机立即开始计数时,使用的发电机product根本不会计数.
其他工具itertools做我期望的.例如,以下内容:
for f in takewhile(lambda x: True, count()):
print(f)
Run Code Online (Sandbox Code Playgroud)
将打印一个数字流因为takewhile是懒惰的.
给定一个迭代器i,我想要一个迭代器,它产生每个元素的n次数,即相当于这个函数
def duplicate(i, n):
for x in i:
for k in range(n):
yield x
Run Code Online (Sandbox Code Playgroud)
这有一个单行吗?
相关问题:复制列表中的每个成员 - python,但zip解决方案在这里不起作用.