對於我正在處理的一個小項目,我需要遍歷一個列表。對於這個循環的每個元素,我必須通過同一個列表開始另一個循環,將前一個元素作爲新循環的第一個元素。例如,我想能夠生產這樣的事情:複製可迭代對象的Python方法
1, 2, 3, 4, 1, 2, 3, 4, 1, ...
2, 3, 4, 1, 2, 3, 4, 1, 2, ...
3, 4, 1, 2, 3, 4, 1, 2, 3, ...
4, 1, 2, 3, 4, 1, 2, 3, 4, ...
1, 2, 3, 4, 1, 2, 3, 4, 1, ...
...
我認爲每一個。接下來(後複製itertools.cycle)將保存當前狀態,這樣我就可以開始新的週期與來自「外部」循環的元素相關聯。甚至「重置循環指針」到更舊的位置。我試過如下:
>>> import itertools, copy
>>> a = itertools.cycle([1, 2, 3, 4])
>>> b = copy.copy(a)
,但得到這個錯誤:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.6/copy.py", line 95, in copy
return _reconstruct(x, rv, 0)
File "/usr/lib/python2.6/copy.py", line 323, in _reconstruct
y = callable(*args)
File "/usr/lib/python2.6/copy_reg.py", line 93, in __newobj__
return cls.__new__(cls, *args)
TypeError: cycle expected 1 arguments, got 0
我知道有很多不同的方式來實現我想要什麼,但我在尋找一些短期的,明確的和Python的代碼。也許有人有另一個想法,甚至一個片段?這是not possible to copy iterator objects喚醒了我的興趣。在需要迭代迭代的情況下,是否有最佳實踐?或者正在複製一些愚蠢無用的迭代?
他們並不傻,[PEP 323](http://www.python.org/dev/peps/pep-0323/)考慮製作可複製的迭代器。 – Matt 2012-11-06 20:06:29