簡體   English   中英

如何理解 DNA 序列翻譯中 function 范圍的中間論點?

[英]How to understand a middle argument for the range function in DNA sequence translation?

在一個練習中,我的任務是將 DNA 的文本序列(例如“TCGATGAATCG..”)轉換為蛋白質序列(例如“RDFJKDSJKS...”)。

我使用了這段代碼:

#rna to aa
def translate(phiseq): 
    
    codontable = {
        'ATA':'I', 'ATC':'I', 'ATT':'I', 'ATG':'M',
        'ACA':'T', 'ACC':'T', 'ACG':'T', 'ACT':'T',
        'AAC':'N', 'AAT':'N', 'AAA':'K', 'AAG':'K',
        'AGC':'S', 'AGT':'S', 'AGA':'R', 'AGG':'R',                 
        'CTA':'L', 'CTC':'L', 'CTG':'L', 'CTT':'L',
        'CCA':'P', 'CCC':'P', 'CCG':'P', 'CCT':'P',
        'CAC':'H', 'CAT':'H', 'CAA':'Q', 'CAG':'Q',
        'CGA':'R', 'CGC':'R', 'CGG':'R', 'CGT':'R',
        'GTA':'V', 'GTC':'V', 'GTG':'V', 'GTT':'V',
        'GCA':'A', 'GCC':'A', 'GCG':'A', 'GCT':'A',
        'GAC':'D', 'GAT':'D', 'GAA':'E', 'GAG':'E',
        'GGA':'G', 'GGC':'G', 'GGG':'G', 'GGT':'G',
        'TCA':'S', 'TCC':'S', 'TCG':'S', 'TCT':'S',
        'TTC':'F', 'TTT':'F', 'TTA':'L', 'TTG':'L',
        'TAC':'Y', 'TAT':'Y', 'TAA':'_', 'TAG':'_',
        'TGC':'C', 'TGT':'C', 'TGA':'_', 'TGG':'W',
    }
    
    phipep = ""

    for i in range(0, len(phiseq)-(3+len(phiseq)%3), 3): 
        codon = phiseq[i:i + 3]
        phipep += codontable[codon]
    return phipep
 
pep = translate(phiseq)

其中 phiseq 是所討論的 DNA 序列,codontable 是將密碼子翻譯成蛋白質的字典索引,循環讀取 DNA 序列的長度並輸出蛋白質序列。 Pep 表示肽。

我的問題是,為什么 function 范圍的中間參數(停止)是什么意思? 即:

len(phiseq)-(3+len(phiseq)%3)

在我的猿腦中,它只是給出了一個似乎可以很好地用於此目的的隨機數,但我從互聯網的某個地方偷了它,無法解釋它是如何工作的。 我偷它的地方也沒有解釋。 我通過這個操作到底實現了什么?

謝謝您的幫助。

range(0, len(phiseq)-(3+len(phiseq)%3), 3)

這里的 arguments 是: range(start, stop, stepsize)

如果 stop 參數只是phiseq的長度,你可能會得到一個 KeyError。 for循環快結束時,您可以得到一段phiseq ,它導致codon變量只有一個或兩個鹼基。 如果您在字典中查找該切片,您會得到一個 KeyError。

len(phiseq)-(3+len(phiseq)%3)確保循環在遇到末尾的不完整切片之前停止。 我認為這有點錯誤,因為3+部分可確保您不查看最終密碼子。

讓我們使用'ATCTTGTCGTAG'的示例phiseq

然后len(phiseq)是輸入序列的長度(在這種情況下為 12)。

(3+len(phiseq)%3)得到 3 加上序列長度的余數,除以 3。這有點棘手,但在此示例中表示3+12%3 ,其中12%3等於到0所以3+0所以3

范圍 function 很簡單,(即range(1,10,1) )它為您提供了一系列值,在此示例中,從 1 到 10 每次遞增 1,因此 1、2、3、...、 9(由於 python 編碼原因,它停在 9 處)。

因此,知道這些事情意味着 for 循環會以一種安全的方式查看ii+3 ,這種方式不會因查看輸入序列的長度而導致錯誤。

暫無
暫無

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

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