[Python-Dev] Re: Reiterability

Raymond Hettinger python at rcn.com
Sun Oct 19 12:50:24 EDT 2003

> > A better name would be clone(); copy() would work too, as long as
> > clear that it copies the iterator, not the underlying sequence or
> > series.  (Subtle difference!)
> >
> > Reiteration is a special case of cloning: simply stash away a clone
> > before you begin. 

So far, all of my needs for re-iteration have been met by storing some
of the iterator's data.  If all of it needs to be saved, I use list(it).
If only a portion needs to be saved, then I use the code from the tee() 
example in the itertools documentation:

    def tee(iterable):
        "Return two independent iterators from a single iterable"
        def gen(next, data={}, cnt=[0]):
            dpop = data.pop
            for i in itertools.count():
                if i == cnt[0]:
                    item = data[i] = next()
                    cnt[0] += 1
                    item = dpop(i)
                yield item
        next = iter(iterable).next
        return (gen(next), gen(next))

Raymond Hettinger

More information about the Python-Dev mailing list