Confused over Lists

Harvey Thomas hst at empolis.co.uk
Fri Aug 2 16:15:26 CEST 2002


Paul Brian [mailto:paul1brian at yahoo.com] wrote
> 
> Dear all,
> 
> If I have a list of items, and wish to test each item, and 
> remove those
> items that meet a certain criteria, I assumed I could use 
> list.remove()
> 
> however I came across the following problem:
> 
> imagine a list of numbers, [1,1,2,3,4,5] and I wish to remove 
> all the 1's.
> 
> 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.
> 
> Now this does make sense, and I can get round it using 
> seperate lists as
> stores, but 2 questions
> 
> 1) Am I missing something really obvious on how to handle 
> this the way I
> think it *should* work (NB absolutley no PEP orientated 
> issues here - no
> desire to try and say we should change behaviour of lists cos 
> i dont get it)
> 
> 2) How do I get access to that magic counter. It would be 
> very useful in all
> sorts of ways.
> 
> Thank you :-)
> 
> 
> 
> ------------------------------
> Paul Brian
> (07899) 877 295
> paul1brian at yahoo.com

To answer your first question:

filter(lambda x: x!= 1, demoList)

will give you a new list with the 1 elements removed

HTH

Harvey

_____________________________________________________________________
This message has been checked for all known viruses by the MessageLabs Virus Scanning Service.




More information about the Python-list mailing list