Confused over Lists
Jonathan Hogg
jonathan at onegoodidea.com
Fri Aug 2 10:27:15 EDT 2002
On 2/8/2002 14:56, in article
1028296609.5721.0.nnrp-12.c1c3e11b at news.demon.co.uk, "Paul Brian"
<paul1brian at yahoo.com> wrote:
> the following I thought should work :-
>
> demoList = [1, 1, 2, 3, 4, 5]
> for num in demoList:
> if num == 1:
> demoList.remove(num)
> print demoList
>
> but I get
>>>> [1, 2, 3, 4, 5]
>
>
> There appears to be a magic counter that keeps track of what index it has
> already iteratered over in the list.
> When the first "1" is encountered (index 0) it removes it, and shifts the
> next "1" to index 0.
> But the magic counter thinks it has already visited index 0 and so "blips"
> over the second 1, thus not removing that "1" from the list.
Modifying a list that you're looping over has undefined results. Better
would be:
>>> demoList = [1, 1, 2, 3, 4, 5]
>>>
>>> newList = [num for num in demoList if num <> 1]
>>> newList
[2, 3, 4, 5]
>>>
or:
>>> newList = filter( lambda num: num <> 1, demoList )
>>> newList
[2, 3, 4, 5]
>>>
Jonathan
More information about the Python-list
mailing list