我正在试着写一个函数,使用列表理解关于开放阅读框架,使用一个只有停止密码子的字典。程序一次接受三个字母,如果这三个字母是停止密码子之一,则程序停止并计算字母数(停止密码子不计算,之后也不计算)。
例如,nextStop2('AAAAAAAGTGGGTGCTAGGTTGGC')应该返回15。这是我到目前为止得到的结果,但是python一直告诉我语法错误。有人能给我一些关于如何改进的建议吗?
def nextStop2(Seq):
GeneticCodeStop = {'TAA':'X', 'TAG':'X', 'TGA':'X'}
seq2 = ''.join(i if GeneticCodeStop[Seq[i:i+3]]!='X' else end_of_loop()
for i in range(0,len(Seq),3))
return len(seq2)下面是使用for循环的正确代码(由diggusbickus提供)。我试图将其转换为列表理解,但不确定其语法。
def nextStop2(Seq):
GeneticCodeStop = ['TAA', 'TAG', 'TGA']
seq2=''
for i in range(0,len(Seq),3) :
codon=Seq[i:i+3]
if codon in GeneticCodeStop:
break
seq2+=codon
return len(seq2)发布于 2021-11-09 21:12:56
itertools.takewhile (自下而上阅读评论):
''.join( # joining them into a single string
itertools.takewhile(
lambda x: x not in GeneticCodeStop, # until a stop codon found
(Seq[i:i+3] for i in range(0, len(Seq), 3)) # iterate codons
)
)发布于 2021-11-09 21:18:17
以Marat的答案为基础。返回字符串的长度,而不为副本分配空间:
def nextStop2(Seq, GeneticCodeStop=['TAA', 'TAG', 'TGA']):
return sum(3 for _ in
itertools.takewhile(
lambda x: x not in GeneticCodeStop,
(Seq[i:i+3] for i in range(0, len(Seq), 3))
))https://stackoverflow.com/questions/69904951
复制相似问题