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. -- http://mail.python.org/mailman/listinfo/python-list