簡體   English   中英

與生物學相關的列表理解

[英]List comprehension in relation to biology

我正在嘗試使用僅包含終止密碼子的字典使用關於開放閱讀框架的列表理解來編寫函數。 程序一次接收三個字母,如果這三個字母是那個終止密碼子之一,程序就會停止並計算字母的數量(終止密碼子不計算在內,之后也不計算任何東西)。

例如, 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)

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

以馬拉的回答為基礎。 返回字符串的長度而不為副本分配空間:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM