python - 需要在python中的迭代器的开头添加一个元素

标签 python iterator

我有一个程序如下:

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/

相关文章:

c++ - STL 显示输出

c++ - 带有 LinkedList 的迭代器类?

C++ 流迭代器

java - 如何让这个算法变得懒惰呢? ( java )

python - 如何通过挤压将WAV音频文件的长度更改为适合固定长度

python - Python 装饰器有哪些常见用途?

python - Django URL 中带有斜杠的命名组

python django 日志记录 timerotatingfilehandler

python - 如何避免pyspark中表达式中的多个窗口函数

python - 如何实现自定义迭代器以便可以嵌套它们?