我有一个包含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数据操作的有用教程,那也很棒。感谢!!!
答案 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']