this is simple...
Maric Michaud
maric at aristote.info
Sat Jun 28 00:49:10 EDT 2008
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
More information about the Python-list
mailing list