Hallo pylist,

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

problem:
========
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.

solution:
=========
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
                
                try:
                        self.pushback( self.nextfn( ) )
                except StopIteration:
                        return False
                else:
                        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
---------------------------------------------------------------------

proposal:
=========
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
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to