<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<META NAME="Generator" CONTENT="MS Exchange Server version 08.00.0681.000">
<TITLE>iterating over a changing list</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/rtf format -->

<P DIR=LTR><SPAN LANG="en-us"><FONT COLOR="#0070C0" FACE="Calibri">I</FONT></SPAN><SPAN LANG="en-us"><FONT COLOR="#0070C0" FACE="Calibri">’</FONT></SPAN><SPAN LANG="en-us"><FONT COLOR="#0070C0" FACE="Calibri">m trying to iterate over a list of elements, and ma</FONT></SPAN><SPAN LANG="en-us"><FONT COLOR="#0070C0" FACE="Calibri">ke changes to the list in front of the element I</FONT></SPAN><SPAN LANG="en-us"><FONT COLOR="#0070C0" FACE="Calibri">’</FONT></SPAN><SPAN LANG="en-us"><FONT COLOR="#0070C0" FACE="Calibri">m currently working with.  I can update the list, but the</FONT></SPAN><SPAN LANG="en-us"><FONT COLOR="#0070C0" FACE="Calibri"> </FONT></SPAN><SPAN LANG="en-us"> <FONT COLOR="#0070C0" FACE="Calibri">‘</FONT></SPAN><SPAN LANG="en-us"><FONT COLOR="#0070C0" FACE="Calibri">for</FONT></SPAN><SPAN LANG="en-us"><FONT COLOR="#0070C0" FACE="Calibri">’</FONT></SPAN><SPAN LANG="en-us"><FONT COLOR="#0070C0" FACE="Calibri">  doesn</FONT></SPAN><SPAN LANG="en-us"><FONT COLOR="#0070C0" FACE="Calibri">’</FONT></SPAN><SPAN LANG="en-us"><FONT COLOR="#0070C0" FACE="Calibri">t see the new element.  Here</FONT></SPAN><SPAN LANG="en-us"><FONT COLOR="#0070C0" FACE="Calibri">’</FONT></SPAN><SPAN LANG="en-us"><FONT COLOR="#0070C0" FACE="Calibri">s the code:</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">import string</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">def add_element(items, point):</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">    items = items[:point+1][:] + [['new']] + items[point+1:]</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">    return items</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">def main():</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">    pass</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">itmlst = [['a'],['b']]</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">itmcntr = 0</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">for itm in itmlst:</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">    cmd = ''</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">    while True:</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">        cmd = raw_input('break, add, print:')</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">        if cmd == 'break':</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">            break</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">        elif cmd == 'add':</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">            itmlst = add_element(itmlst,itmcntr)</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">        elif cmd == 'print':</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">            print 'current item:', itm</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">        else:</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">            print 'invalid'</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">    itmcntr += 1</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">    print 'finished with', itm, 'in', itmlst</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">print len(itmlst), 'total items in list'</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT COLOR="#0070C0" FACE="Calibri">If I provide the</FONT></SPAN><SPAN LANG="en-us"> <FONT COLOR="#0070C0" FACE="Calibri">inputs: [print add print break print break] at the prompt,</FONT></SPAN><SPAN LANG="en-us"> <FONT COLOR="#0070C0" FACE="Calibri">I</FONT></SPAN><SPAN LANG="en-us"><FONT COLOR="#0070C0" FACE="Calibri"> get this output</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT COLOR="#76923C" FACE="Calibri">current item: ['a']</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT COLOR="#76923C" FACE="Calibri">current item: ['a']</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT COLOR="#76923C" FACE="Calibri">finished with ['a'] in [['a'], ['new'], ['b']]</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT COLOR="#76923C" FACE="Calibri">current item: ['b']</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT COLOR="#76923C" FACE="Calibri">finished with ['b'] in [['a'], ['new'], ['b']]</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT COLOR="#76923C" FACE="Calibri">3 total items in list</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT COLOR="#0070C0" FACE="Calibri">The new element got added, but it wasn</FONT></SPAN><SPAN LANG="en-us"><FONT COLOR="#0070C0" FACE="Calibri">’</FONT></SPAN><SPAN LANG="en-us"><FONT COLOR="#0070C0" FACE="Calibri">t used in the iteration over the list of items.</FONT></SPAN><SPAN LANG="en-us"><FONT COLOR="#0070C0" FACE="Calibri"> Other than setting up a counter and calling len() each loo</FONT></SPAN><SPAN LANG="en-us"><FONT COLOR="#0070C0" FACE="Calibri">p, is there some way to</FONT></SPAN><SPAN LANG="en-us"> <FONT COLOR="#0070C0" FACE="Calibri">have the changing list recognized</FONT></SPAN><SPAN LANG="en-us"> <FONT COLOR="#0070C0" FACE="Calibri">within the for loop?</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT COLOR="#0070C0" FACE="Calibri">Thanks in advance for any help.</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT COLOR="#0070C0" FACE="Calibri">Ed</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

</BODY>
</HTML>