On Jun 28, 2:48 pm, Mel <[EMAIL PROTECTED]> wrote: > ToshiBoy wrote: > > I have two lists A and B that are both defined as range(1,27) I want > > to find the entries that are valid for A = BxB > [ ... ] > > I get, as expected 1,4,9,16,25 printed out being the only members of B > > where the condition is true, but when I print B I get: > > > [1, 2, 3, 4, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25] > > > 1 to 5 is correct, but why doesn't the remove method remove 7 and > > above? What am I doing wrong here? > > Try this: > > A = range(1,27) > B = range(1,27) > C = [] > > for b in B: > print "Trying", b > if b*b in A: > print b > C.append (b) > else: > print "Removing", b > B.remove(b) > print 'B', B > print 'C', C > > The essential problem is that your `B.remove`s are pulling the rug out from > under your `for b in B:`. There are ways to mess with B while you iterate. > Running though B backwards will do: `for b in B[::-1]:`, or iterating over > a copy of B: `for b in B[:]:` or `for b in list(B):`. Leaving B alone and > building up the desired items in C is probably simplest. > > Mel.
Thank you, of course! :-) Didn't even think of that... that I was modifying my iterators... Thank you -- http://mail.python.org/mailman/listinfo/python-list