首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与生物学相关的列表理解

与生物学相关的列表理解
EN

Stack Overflow用户
提问于 2021-11-09 20:54:05
回答 2查看 53关注 0票数 0

我正在试着写一个函数,使用列表理解关于开放阅读框架,使用一个只有停止密码子的字典。程序一次接受三个字母,如果这三个字母是停止密码子之一,则程序停止并计算字母数(停止密码子不计算,之后也不计算)。

例如,nextStop2('AAAAAAAGTGGGTGCTAGGTTGGC')应该返回15。这是我到目前为止得到的结果,但是python一直告诉我语法错误。有人能给我一些关于如何改进的建议吗?

代码语言:javascript
复制
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提供)。我试图将其转换为列表理解,但不确定其语法。

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

发布于 2021-11-09 21:12:56

itertools.takewhile (自下而上阅读评论):

代码语言:javascript
复制
''.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
    )
)
票数 2
EN

Stack Overflow用户

发布于 2021-11-09 21:18:17

以Marat的答案为基础。返回字符串的长度,而不为副本分配空间:

代码语言:javascript
复制
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))
        ))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69904951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档