我有一个程序如下:
a=reader.next()
if *some condition holds*:
#Do some processing and continue the iteration
else:
#Append the variable a back to the iterator
#That is nullify the operation *a=reader.next()*
如何将元素添加到迭代器的开头?
(或者有没有更简单的方法来做到这一点?)
编辑:好的,让我这样说。我需要迭代器中的下一个元素而不删除它。
我该怎么做>?
最佳答案
因此,Python 迭代器的功能非常有限——没有“附加”或类似的东西。您需要将通用迭代器包装在添加该功能的包装器中。例如。:
class Wrapper(object):
def __init__(self, it):
self.it = it
self.pushedback = []
def __iter__(self):
return self
def next(self):
if self.pushedback:
return self.pushedback.pop()
else:
return self.it.next()
def pushback(self, val):
self.pushedback.append(val)
这是 Python 2.5(也应该在 2.6 中工作)——建议 2.6 的轻微变体和 3.any 的强制(使用
next(self.it)
而不是 self.it.next()
并定义 __next__
而不是 next
)。编辑 :OP 现在说他们需要的是“提前查看而不消耗”。包装仍然是最好的选择,但另一种选择是:
import itertools
...
o, peek = itertools.tee(o)
if isneat(peek.next()): ...
这不会前进
o
(请记住在您决定要这样做时提前它;-)。
关于python - 需要在python中的迭代器的开头添加一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1264319/