You could probably implement something like this using generators and the send method (note the example is untested and intended for 2.6: I lack Python on this machine):
def gen(list_): for i, v in enumerate(list_): list_[i] = yield v def execute(): data = range(10) iterator = gen(data) lastValue = iterator.next() while True: print lastValue try: lastValue = iterator.send(lastValue + 1) except StopIteration: break print data >>> execute() 0 1 2 3 4 5 6 7 8 9 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] Chris On Wed, Jun 22, 2011 at 4:10 PM, Neal Becker <ndbeck...@gmail.com> wrote: > Steven D'Aprano wrote: > > > On Wed, 22 Jun 2011 15:28:23 -0400, Neal Becker wrote: > > > >> AFAICT, the python iterator concept only supports readable iterators, > >> not write. Is this true? > >> > >> for example: > >> > >> for e in sequence: > >> do something that reads e > >> e = blah # will do nothing > >> > >> I believe this is not a limitation on the for loop, but a limitation on > >> the python iterator concept. Is this correct? > > > > Have you tried it? "e = blah" certainly does not "do nothing", regardless > > of whether you are in a for loop or not. It binds the name e to the value > > blah. > > > > Yes, I understand that e = blah just rebinds e. I did not mean this as an > example of working code. I meant to say, does Python have any idiom that > allows > iteration over a sequence such that the elements can be assigned? > > ... > > * iterators are lazy sequences, and cannot be changed because there's > > nothing to change (they don't store their values anywhere, but calculate > > them one by one on demand and then immediately forget that value); > > > > * immutable sequences, like tuples, are immutable and cannot be changed > > because that's what immutable means; > > > > * mutable sequences like lists can be changed. The standard idiom for > > that is to use enumerate: > > > > for i, e in enumerate(seq): > > seq[i] = e + 42 > > > > > AFAIK, the above is the only python idiom that allows iteration over a > sequence > such that you can write to the sequence. And THAT is the problem. In many > cases, indexing is much less efficient than iteration. > > -- > http://mail.python.org/mailman/listinfo/python-list >
-- http://mail.python.org/mailman/listinfo/python-list