Le Saturday 28 June 2008 06:30:25 ToshiBoy, vous avez écrit : > I am a newbie... and the first to admit it... but this has me stuffed: > > 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 > > so here is my code: > > A = range(1,27) > B = range(1,27) > > for b in B: > if b*b in A: > print b > else: > B.remove(b) > > 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? > -- > http://mail.python.org/mailman/listinfo/python-list
This is a frequent error from beginner, you're iterating over a list while modifying it, the result is undefined. The most immediate solution is to use a copy of the list you iterate over : >>[169]: A = range(1,27) >>>[170]: B = range(1,27) >>>[171]: for b in B[:] : if b*b in A: print b else: B.remove(b) .....: .....: 1 2 3 4 5 >>>[176]: B ...[176]: [1, 2, 3, 4, 5] Note that this can be easily done with the simpler : B = [ e for e in B if e*e not in A ] -- _____________ Maric Michaud -- http://mail.python.org/mailman/listinfo/python-list