properly delete item during "for item in..."

mk mrkafk at
Thu Jul 17 18:57:32 CEST 2008

Gary Herron wrote:
> You could remove the object from the list with
>  del myList[i]
> if you knew i.  HOWEVER, don't do that while looping through the list!  
> Changing a list's length will interact badly with the for loop's 
> indexing through the list, causing the loop to mis the element following 
> the deleted item.

Jumping into a thread, I know how not to do it, but not how to do it 

Iterating over a copy may _probably_ work:

 >>> t=['a', 'c', 'b', 'd']
 >>> for el in t[:]:
	del t[t.index(el)]

 >>> t

However, is it really safe? Defining safe as "works reliably in every 
corner case for every indexable data type"?

Con: suppose the data structure t is really, really big. Just deleting 
some items from t temporarily doubles the memory consumption.

More information about the Python-list mailing list