我想制作一个 itertools.cycle
对象的浅拷贝,但我不知道怎么做,因为它没有内置的复制方法。我想实现类似以下的目标,我在其中创建循环的副本,遍历它几次,然后再次复制原始副本,并从循环的开头开始.
c = "ABCD"
cyc = itertools.cycle(c)
cyc_copy = cyc.copy()
for i in range(2):
print(next(cyc_copy))
cyc_copy = cyc.copy()
for i in range(2):
print(next(cyc_copy))
> A
B
A
B
最佳答案
它可能需要一些重构,但工厂在这里工作得很好。
from itertools import cycle
cycle_factory = lambda: cycle('1234')
c1 = cycle_factory()
print next(c1) # 1
c2 = cycle_factory()
print next(c2) # 1
否则,我不确定您是否能够满足每次都在循环开始时开始的标准。基于类的方法也可以工作,但需要更多的开销。
itertools.tee
方法的一个问题是它将在 tee-d 迭代器停止的地方恢复迭代,而不是从头开始。因此,您必须在一开始就开球。如果您无法控制循环的生成方式,这可能是唯一的选择。
关于python - 复制一个 itertools 循环对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37466115/