方法1:做兩個itertools.cycle
對象
import itertools
c = 'ABCD'
cyc1 = itertools.cycle(c)
cyc2 = itertools.cycle(c)
for _ in range(2): print(next(cyc1)) # prints A\nB\n
for _ in range(2): print(next(cyc2)) # prints A\nB\n
<script src="//repl.it/embed/IRcx/0.js"></script>
[優選的解決方案]方法2:分成N個迭代器通過使用itertools.tee
import itertools
cyc = itertools.cycle('ABCD')
cyc1, cyc2 = itertools.tee(cyc, 2)
for _ in range(2): print(next(cyc1)) # prints A\nB\n
for _ in range(2): print(next(cyc2)) # prints A\nB\n
<script src="//repl.it/embed/IRcx/2.js"></script>
警告使用copy.copy
功能將無法正常創建迭代器的副本使用copy
模塊。
import itertools, copy
cyc = itertools.cycle('ABCD')
cyc1 = copy.copy(cyc)
cyc2 = copy.copy(cyc)
for _ in range(2): print(next(cyc1)) # prints A\nB\n
for _ in range(2): print(next(cyc2)) # prints C\nD\n
<script src="//repl.it/embed/IRcx/3.js"></script>
使用copy
模塊解決方法:此可能的解決方案可以是使用copy.deepcopy
功能。
import itertools, copy
cyc = itertools.cycle('ABCD')
cyc1 = copy.deepcopy(cyc)
cyc2 = copy.deepcopy(cyc)
for _ in range(2): print(next(cyc1)) # prints A\nB\n
for _ in range(2): print(next(cyc2)) # prints A\nB\n
<script src="//repl.it/embed/IRcx/4.js"></script>
['itertools.tee'](https://docs.python.org/3/library/itertools.html#itertools.tee)。 – vaultah
'itertools.tee'起作用,但它需要存儲原始'循環'迭代器的所有輸出,包括循環返回時的重複輸出。 – user2357112
您是否處於只能訪問循環而不是原始迭代的情況?似乎只是製造新的週期將是明智的。 –