On 10/10/2012 20:52, Ed Owens wrote:
I'm trying to iterate over a list of elements, and make changes to the list
in front of the element I'm currently working with.  I can update the list,
but the  'for'  doesn't see the new element.  Here's the code:

import string

def add_element(items, point):
     items = items[:point+1][:] + [['new']] + items[point+1:]
     return items

def main():
     pass

itmlst = [['a'],['b']]
itmcntr = 0

for itm in itmlst:
     cmd = ''
     while True:
         cmd = raw_input('break, add, print:')
         if cmd == 'break':
             break
         elif cmd == 'add':
             itmlst = add_element(itmlst,itmcntr)
         elif cmd == 'print':
             print 'current item:', itm
         else:
             print 'invalid'
     itmcntr += 1
     print 'finished with', itm, 'in', itmlst
print len(itmlst), 'total items in list'

If I provide the inputs: [print add print break print break] at the prompt,
I get this output

current item: ['a']
current item: ['a']
finished with ['a'] in [['a'], ['new'], ['b']]
current item: ['b']
finished with ['b'] in [['a'], ['new'], ['b']]
3 total items in list

The new element got added, but it wasn't used in the iteration over the list
of items. Other than setting up a counter and calling len() each loop, is
there some way to have the changing list recognized within the for loop?

Thanks in advance for any help.

Ed



_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


Usually handled by iterating over a copy of the list.

for itm in itmlst[:]:

--
Cheers.

Mark Lawrence.

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to