【发布时间】:2012-08-20 12:45:33
【问题描述】:
我有一个包含itertools.cycle 实例的类,我希望能够复制它。一种方法(我能想到的唯一一种方法)是提取初始迭代(它是一个列表),并存储循环所在的位置。
不幸的是,我无法获取用于创建循环实例的列表,似乎也没有明显的方法:
import itertools
c = itertools.cycle([1, 2, 3])
print dir(c)
['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__',
'__hash__', '__init__', '__iter__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__',
'__subclasshook__', 'next']
我可以想出一些合理的理由来解释为什么对于某些类型的输入迭代不允许这样做,但是对于元组甚至可能是列表(可变性可能是一个问题),我不明白为什么它会不可能。
任何人都知道如果可以从itertools.cycle 实例中提取非无限迭代。如果没有,有谁知道为什么这个想法不好?
【问题讨论】:
-
为什么需要这个?要复制实例,只需使用相同的源列表重新创建它(您可以将源列表保存在其他位置)。但是,这将创建一个新的迭代器。请记住,迭代器包含比源可迭代更多的状态,例如序列中的当前位置。
-
您是否考虑过调查
itertools.tee?根据你想要这个,我认为你可以做类似myiter,copy = itertools.tee(myiter) -
说真的,为什么需要这样做?在这一点上,我倾向于认为您的设计过程存在缺陷
-
不是
disallowed,只是cycle()没有的功能。此外,cycle是用 C 语言实现的,因此“破解”内部并不那么容易。
标签: python python-2.7 itertools