[Tutor] Linked List
Alan Gauld
alan.gauld at freenet.co.uk
Sun Mar 6 01:04:56 CET 2005
> >>> myls=range(50)
> >>> for i in myls:
> print i
> if i==20:
> myls.insert(5,5)
>
> The point is, the list(both size and elements) is
> changing even as it is being operated upon.
You are quite right it is, in general a bad idea to alter
the thing you are iterating over.
> This particular case goes into infinite loop at i=20.
For obvious reasons: you insert something before 20 which
moves up one position, the next element in the list is
now 20 again.
Better to use a while loop over the indices if you must
do this kind of thing, then increment the index as well
as insert the item.
myls = range(50)
index = 0
while index < len(myls):
print myls[index]
if myls[index] == 20:
myls.insert(5,5)
index += 1
index += 1
But if the changes are being made outside your loop (eg by
another thread - dangerous practice anyway!) you need the
linked list approach and you also need to treat our list
as a protected resource in your threads. ie lock it before
using otherwise you may wind up deleting the thing you are
working on!
HTH,
Alan G.
More information about the Tutor
mailing list