相关疑难解决方法(0)

itertools.product是否懒洋洋地评估其参数?

以下内容从未在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是懒惰的.

python python-itertools python-3.x

6
推荐指数
1
解决办法
453
查看次数

在迭代器中复制每个成员

给定一个迭代器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解决方案在这里不起作用.

python iterator

1
推荐指数
1
解决办法
144
查看次数

标签 统计

python ×2

iterator ×1

python-3.x ×1

python-itertools ×1