deleting elements from a list in a for loop

Larry Bates lbates at syscononline.com
Fri Oct 29 16:54:17 CEST 2004


When I encounter this type of requirement I almost always find
that it is much easier and clearer to use list comprehensions
or slicing to create a new lists (depending on your needs):

el=[ "one", "two", "three", "four" ]

index=0
el=[line for line in el if line == el[index]]

or if you want the non-matching elements

el2=[line for line in el if line != el[index]]

Larry Bates
Syscon, Inc.


flupke wrote:
> 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