[Tutor] Re: Printing two elements in a list

Jacob S. keridee at jayco.net
Mon Dec 20 20:29:42 CET 2004


That's interesting, I hadn't thought of that!
Jacob

> Jacob S. wrote:
> 
> > Would this work for you?
> >
> > a = ['Name = stuff','CGTATAGCTAGCTA','Name = stuff','CGATATGCCGGCTA']
> > for index,thing in enumerate(a):
> >     if "Name=" in thing:
> >         del a[index]
> >
> > I know, that it might be slow, but I thought that maybe it would hold 
> > its
> > own because it doesn't have to import the re module, everything's 
> > builtin,
> > etc.
> >
> Be careful here, the above code will miss deleting an element 
> containing "Name=" if there are two in a row.  Look at this simple 
> example where we attempt to delete elements equal to 2:
> 
> ###
> 
>  >>> a=[1,2,1,2]
>  >>> for i,x in enumerate(a):
> ..  if x==2:del a[i]
> ..
>  >>> a
> [1, 1]
>  >>> #
>  >>> # ok that looks right, but watch this
>  >>> #
>  >>> b=[2,2,1,1]
>  >>> for i,x in enumerate(b):
> ..   if x==2: del b[i]
> ..
>  >>> b
> [2, 1, 1]
> 
> ###
> 
> After deleting element 0 in b, all the elements "slid down" one place 
> and the 2nd 2 that was in b is now in position 0...but you are moving 
> on to index 1 with the enumerate loop:
> 
> [2, 2, 1, 1]
>   ^
>   enumerate is at index 0
> 
> we delete element 0
> 
> [2, 1, 1]
>      ^
>      enumerate is at index 1 and the 2 that was at position 1 is now at 
> position 0
> 
> An alternative is to use a list comprehension, keeping only the 
> elements that are not 2. As is shown, you can replace the list you are 
> filtering with the filtered result:
> 
> ###
> 
>  >>> b=[2,2,1,1]
>  >>> b=[x for x in b if not(x==2)]
>  >>> b
> [1, 1]
> 
> ###
> 
> /c
> 
> 
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
> 
> 


More information about the Tutor mailing list