Python中有一个很棒的软件包,名为
itertools。
但是在开始之前,它很好地解释了如何在Python中实现迭代协议。如果要在容器上提供迭代,请指定
__iter__()提供迭代器类型的类方法。“了解Python的’for’语句”是一篇不错的文章,涵盖了该
for-in语句在Python中的实际工作方式,并提供了有关迭代器类型如何工作的很好概述。
看一下以下内容:
>>> sequence = [1, 2, 3, 4, 5]>>> iterator = sequence.__iter__()>>> iterator.next()1>>> iterator.next()2>>> for number in iterator: print number 345
现在回到
itertools。该软件包包含用于各种迭代目的的函数。如果您需要进行特殊测序,那么这是第一个研究的地方。
在底部,您可以找到“食谱”部分,其中包含
使用现有itertools作为构建块来创建扩展工具集的食谱 。
有一个有趣的功能可以完全满足您的需求:
def consume(iterator, n): '''Advance the iterator n-steps ahead. If n is none, consume entirely.''' collections.deque(itertools.islice(iterator, n), maxlen=0)
这是一个简短易懂的示例,说明其工作方式 (Python 2.5) :
>>> import itertools, collections>>> def consume(iterator, n): collections.deque(itertools.islice(iterator, n))>>> iterator = range(1, 16).__iter__()>>> for number in iterator: if (number == 5): # Disregard 6, 7, 8, 9 (5 doesn't get printed just as well) consume(iterator, 4) else: print number1234101112131415



