python - 复制一个 itertools 循环对象

标签 python python-itertools

我想制作一个 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/

相关文章:

python - 如何检查python中是否存在(但不继承)函数?

Python:两个列表上的每个可能的离散函数

Python Itertools : Complex "product"

Python difflib 的比率,quick_ratio 和 real_quick_ratio

python - 通过 Pydev 使用 Django 时出现间歇性 "Page Not Found"

python - 基于字典中的值的字典的所有可能组合

python - 为什么 from `from itertools import chain` 有效但 `import itertools.chain as chain` 无效?

Python itertools 获取列表列表的排列和组合

python - Django:将用户重定向回两页

python - 如何对嵌套函数进行单元测试?