this is simple...

Mel mwilson at the-wire.com
Sat Jun 28 00:48:47 EDT 2008


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.




More information about the Python-list mailing list