[英]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 循環會以一種安全的方式查看i
到i+3
,這種方式不會因查看輸入序列的長度而導致錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.