"Diez B. Roggisch" <[EMAIL PROTECTED]> writes:
> No. If you want that, use
> 
> list(iterable)
> 
> Then you have random access. If you _know_ there will be only so much data
> needed to "unget", write yourself a buffered iterator like this:

You can't use list(iterable) in general because the iterable may be
infinite.

> buffered(iterable, size)
> 
> Maybe something like that _could_ go in the itertools. But I'm not really
> convinced, as it is too tied to special cases -

The usual pushback depth needed is just one item and it would solve
various situations like this.  The ASPN recipe I cited for detecting
an empty iterable shows that such problems come up in more than one
place.

Note that besides the buffered iterable, there would also have to be a
version of izip that pushed unused items back onto its iterables.

> and besides that very easily done.

Just about everything in itertools is very easily done, so that's not
a valid argument against it.  

> > How about this (untested):
> > 
> >   def myzip(iterlist):
> >     """return zip of smaller and smaller list of iterables as the
> > individual iterators run out"""
> 
> If that fits your semantics - of course. But the general zip shouldn't
> behave that way.

Of course it shouldn't.  In another post I suggested a way to extend
the general izip, to throw a list of the remaining non-empty iterables
once it hit an empty one.  Maybe there's some problem with that too,
but if so, it's more subtle.

Any idea how Haskell would deal with this?
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to