def works(it): while True: yield [next(it) for _ in xrange(2)] def notworks(it): while True: yield list(next(it) for _ in xrange(2)) print list(works(iter([1,2,3,4,5]))) # will never return print list(notworks(iter([1,2,3,4])))