[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