如何删除包含我指定的字符以外的字符的行?

时间:2017-03-08 01:10:31

标签: python string python-3.x dictionary bioinformatics

我有一个包含DNA和随机行的列表,如下所示:

 dnalist=['AGTCCTGCAGTCG', '@#$@#!AG!!ECG']

我想创建一个函数,过滤掉包含字符'A''G''C'或'T'以外的任何行的任何行。到目前为止,我的代码有一种非常粗略的过滤方式,很容易被愚弄:

def seperate(B):
    'takes a list and seperates the DNA lines'
    newlist=[]
    for i in B:
      if i[0]=='G'or i[0]=='A' or i[0]=='T' or i[0]=='C':
           newlist.append(i)           
    return newlist

如果有人能指出一些有关python数据操作的有用教程,那也很棒。感谢!!!

3 个答案:

答案 0 :(得分:5)

您可以学习的数据操作的最佳工具可能是理解(查看Python文档教程以了解这些)。这是使用它们的解决方案:

[string for string in dnalist if all(char in "GATC" for char in string)]

您可以看到您基本上描述了您想要的数据。上面的意思是“给我所有字符串,其中字符串中的所有字符都在集合{”G“,”A“,”T“,”C“}中。

答案 1 :(得分:1)

有许多不同且有效的方法。这是一种方式:

In [1]: dnalist=['AGTCCTGCAGTCG', '@#$@#!AG!!ECG']

In [2]: filter(lambda x: set(x).issubset(set('ACGT')), dnalist)
Out[2]: ['AGTCCTGCAGTCG']

答案 2 :(得分:1)

您可以将re.search与正则表达式[^AGTC]一起使用,它会尝试查找非AGTC个字符,如果字符串中有任何字符,请将其排除在if之内列表理解:

import re
[x for x in dnalist if not re.search('[^AGTC]', x)]
# ['AGTCCTGCAGTCG']