For loop 互补DNA序列
我在写这个循环时遇到问题;它似乎在第二个序列之后停止 我想把互补的DNA序列返回给给定的DNA序列 例如('AGATTC')->('TCTAAG'),其中A:T和C:gFor loop 互补DNA序列,for-loop,python-3.x,sequence,For Loop,Python 3.x,Sequence,我在写这个循环时遇到问题;它似乎在第二个序列之后停止 我想把互补的DNA序列返回给给定的DNA序列 例如('AGATTC')->('TCTAAG'),其中A:T和C:g def get_complementary_sequence(dna): """(str) -> str > Return the DNA sequence that is complementary to the given DNA sequence >>> get_compl
def get_complementary_sequence(dna):
"""(str) -> str
> Return the DNA sequence that is complementary to the given DNA sequence
>>> get_complementary_sequence('AT')
('TA')
>>> get_complementary_sequence('AGATTC')
('TCTAAG')
"""
x = 0
complementary_sequence = ''
for char in dna:
complementary_sequence = (get_complement(dna))
return complementary_sequence + (dna[x:x+1])
有人能发现为什么循环没有继续吗?你在所有
dna
上调用get\u complete
,而不是每个char
。这将简单地调用具有相同参数len(dna)次的come函数。如果从不使用char
s,就没有理由循环使用它们。如果get\u complete()
可以使用字符,我建议:
for char in dna:
complementary_sequence += get_complement(char)
get_补码的实现将使用单个字符并返回其补码
另外,您将返回互补序列+(dna[x:x+1])。如果您希望函数符合您所记录的行为,+(dna[x:x+1])
将从dna
字符串的开头添加一个额外的(错误的)字符。您只需返回互补序列!感谢@Kevin的关注
你在做什么:
>>> dna = "1234"
>>> for char in dna:
... print dna
...
1234
1234
1234
1234
我所想的更接近你想要做的事情:
>>> for char in dna:
... print char
...
1
2
3
4
总而言之:
# you could also use a list comprehension, with a join() call, but
# this is closer to your original implementation.
def get_complementary_sequence(seq):
complement = ''
for char in seq:
complement += get_complement(char)
return complement
def get_complement(base):
complements = {'A':'T', 'T':'A', 'C':'G', 'G':'C'}
return complements[base]
>>> get_complementary_sequence('AT')
'TA'
>>> get_complementary_sequence('AGATTC')
'TCTAAG'
发生了什么?
你的电话是:
complementary_sequence = (get_complement(dna))
…n次,其中n是字符串的长度。这就给您留下了get\u complement(dna)
在complemental\u序列中的返回值。大概只有一封信吧
然后返回这一个字母(complementary_sequence
),后跟子字符串dna[0:1]
(即dna
中的第一个字母),因为x
总是0
这就是为什么总是返回两个字符
如何修复它?
假设您有如下函数:
def get_complement(d):
return {'T': 'A', 'A': 'T', 'C': 'G', 'G': 'C'}.get(d, d)
…您可以通过简单地使用和来修复您的函数:
下面是一个我将如何做到这一点的示例-实际上只有两行代码:
from string import maketrans
DNA="CCAGCTTATCGGGGTACCTAAATACAGAGATAT" #example DNA fragment
def complement(sequence):
reverse = sequence[::-1]
return reverse.translate(maketrans('ATCG','TAGC'))
print complement(DNA)
什么是
get_completedo?get_complete产生互补碱基对,例如'A':'T'@user2773611这确实打印互补字符串刚才尝试了上面的代码,它只产生了:get_completive_sequence('AGATTC')返回'T'@user2773611我想你误解了我的解释。我已经编辑过了,给你一个完整的,有效的版本。也许我理解了get_补码应该做的错误。你的get_补码工作得很好,就在我运行get_补码序列('AGATTC')时,我得到('T')@user2773611你使用的正是我实现的那个吗?从测试用例中可以看出,它是有效的。您确定循环缩进正确吗?如果不是,它可能会运行一次,您会看到这种行为。
from string import maketrans
DNA="CCAGCTTATCGGGGTACCTAAATACAGAGATAT" #example DNA fragment
def complement(sequence):
reverse = sequence[::-1]
return reverse.translate(maketrans('ATCG','TAGC'))
print complement(DNA)