pushback iterator

Matus matusu at gmail.com
Sun May 17 16:39:38 CEST 2009

Hallo pylist,

I searches web and python documentation for implementation of pushback
iterator but found none in stdlib.

when you parse a file, often you have to read a line from parsed file
before you can decide if you want that line it or not. if not, it would
be a nice feature to be able po push the line back into the iterator, so
nest time when you pull from iterator you get this 'unused' line.

I found a nice and fast solution somewhere on the net:

class Pushback_wrapper( object ):
	def __init__( self, it ):
		self.it = it
		self.pushed_back = [ ]
		self.nextfn = it.next
	def __iter__( self ):
		return self
	def __nonzero__( self ):
		if self.pushed_back:
			return True
			self.pushback( self.nextfn( ) )
		except StopIteration:
			return False
			return True

	def popfn( self ):
		lst = self.pushed_back
		res = lst.pop( )
		if not lst:
			self.nextfn = self.it.next
		return res
	def next( self ):
		return self.nextfn( )

	def pushback( self, item ):
		self.pushed_back.append( item )
		self.nextfn = self.popfn

as this is (as I suppose) common problem, would it be possible to extend
the stdlib of python (ie itertools module) with a similar solution so
one do not have to reinvent the wheel every time pushback is needed?

thx, Matus

More information about the Python-list mailing list