deleting elements from a list in a for loop

Pierre Barbier de Reuille pierre.barbier at cirad.fr
Fri Oct 29 10:29:19 EDT 2004


Hi !

Indeed, you cannot erase elements in a list you're iterating on !
a possibility could be :

to_delete = []
for i in xrange(len(el)):
   if condition:
     to_delete.insert(0, i)
for i in to_delete:
   del el[i]

That should work fine ...

flupke a écrit :
> Hi,
> 
> i'm having trouble with deleting elements from a list in a for loop
> 
> ============== test program ==============
> el = [ "one", "two", "three", "four" ]
> print "**** Start ****"
> print "List = %s " % el
> index = 0
> for line in el:
>     print "    el = %s " % line
>     if ( index == 1 ):
>         print "    deleting %s " % line
>         del el[index]
>     else:
>         index += 1
> print "**** After delete ****"
> print "List = %s " % el
> 
> print "**** After adding two ****"
> el.append("two")
> print "List = %s " % el
> ============== test program ==============
> 
> This is the output that i get
> **** Start ****
> List = ['one', 'two', 'three', 'four']
>     el = one
>     el = two
>     deleting two
>     el = four
>     deleting four
> **** After delete ****
> List = ['one', 'four']
> **** After adding two ****
> List = ['one', 'four', 'two']
> 
> After deleting it doesn't go to element "three". Why is that?
> How can i safely delete from a list?
> The reason is that i'm currently making an application to manage my 
> links. I write a couple of links to the screen in a listbox (wxPython) 
> and thus i delete those links that appear on screen from the list 
> because people will be able to edit them.
> Then when they move to another link section, i write the content of the 
> listbox back to the list. But as i've illustrated in the small example 
> my coding is flawed.
> 
> Thanks,
> Benedict



More information about the Python-list mailing list