这是我的代码打印DNA序列的反转,只有字符串
contain character ["A","T","G","C"]
dna=input("Enter DNA sequnce")
[print(dna[::-1]) for x in dna if x in["A","T","G","C"]]
input: ATGC
the output:
CGTA
CGTA
CGTA
CGTA
如何阻止代码循环字符串中出现的字符数。我可以获得一次输出并打破循环吗?
答案 0 :(得分:2)
基本上你的代码正在检查一个字符,如果它匹配,则反向打印整个列表,尝试使用
dna=input("Enter DNA sequnce")
result=[ x for x in dna if x in["A","T","G","C"]]
print "".join(result[::-1])
如果您不想使用列表推导,那么您也可以使用它
for i in allowed_char:
if i in dna:
print dna[::-1]
break
答案 1 :(得分:2)
您可以尝试:
dna = input("Enter DNA sequnce")
print(''.join(x for x in dna[::-1] if x in "ATGC"))
# CTGA -> AGTC
# ABCD -> CA
答案 2 :(得分:0)
尝试一些功能性编程技巧怎么样?在这里,我推荐PyFunctional lib来做DNA的事情,因为PyFunctional似乎与处理序列问题一起诞生,希望你能从中受益。
安装功能
pip install PyFunctional
对于您的情况,代码如下:
from functional import seq
from operator import add
data = 'ATGC'
result = (seq(list(data))
.filter(lambda x: x in {"A", "T", "G", "C"})
.reduce(add))[::-1]
# CGTA
print(result)
从上面,我们可以看到我们避免使用for循环,并使用函数编程类似过滤器,但我们进一步将该方法组合到一个pipline链中,以避免嵌套的函数方法(类似于map(list(filter) ())))
BTW:在[" A"," T"," G"," C"]中使用x很慢,而是你应该在{" A"," T"," G"," C"}中使用x,它们可以利用哈希集