Jacob S. wrote:
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: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.
###
>>> 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