Confused over Lists

Thys Meintjes thys at netsys.co.za
Fri Aug 2 10:09:11 EDT 2002


Hi Paul,

Usually a bad idea to iterate & manupilate the same list,
rather do something like this:

demoList = [1, 1, 2, 3, 4, 5]
   for num in demoList[:]:
	...


On Fri 02 Aug 02 15:56, Paul Brian 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




More information about the Python-list mailing list