On Thu, Feb 9, 2012 at 2:55 PM, Steven D'Aprano <steve+comp.lang.pyt...@pearwood.info> wrote: > If your data is humongous but only available lazily, buy more memory :)
Or if you have a huge iterable and only need a small index into it, snag those first few entries into a list, then yield everything else, then yield the saved ones: def cycle(seq,n): seq=iter(seq) lst=[next(seq) for i in range(n)] try: while True: yield next(seq) except StopIteration: for i in lst: yield i >>> list(cycle(range(10,20),2)) [12, 13, 14, 15, 16, 17, 18, 19, 10, 11] Requires storage space relative to n, regardless of the length of the iterator. ChrisA -- http://mail.python.org/mailman/listinfo/python-list