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 - [EMAIL PROTECTED] http://mail.python.org/mailman/listinfo/tutor

Reply via email to