首页 > 解决方案 > 与生物学有关的列表理解

问题描述

我正在尝试使用仅包含终止密码子的字典使用关于开放阅读框的列表理解来编写函数。该程序一次接收三个字母,如果这三个字母是该终止密码子之一,则程序停止并计算字母的数量(不计算终止密码子,之后也不计算任何内容)。

例如,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 循环的正确代码(由 diggusbiccus 提供)。我试图将其转换为列表理解,但不确定语法。

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)

标签: pythonlistlist-comprehension

解决方案


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
    )
)

推荐阅读