下面的代碼工作完全一樣意圖:範圍()具有可變步整數值
dnasequences = [
'GCTAGCTAGCTAGCTA',
'CTAGCTAGCTAGCTAG',
'TAGCTAGCTAGCTAGC',
'AGCTAGCTAGCTAGCT'
]
xlate = {'G': 'C', 'C': 'G', 'T': 'A', 'A': 'U'}
def dna2rna(sequences):
rnalist = [xlate[n] for sequence in sequences for n in sequence]
return rnalist
rnasequences = dna2rna(dnasequences)
print([''.join(rnasequences[i:i+16]) for i in range(0, len(rnasequences), 16)])
它返回: [ 'CGAUCGAUCGAUCGAU', 'GAUCGAUCGAUCGAUC', 'AUCGAUCGAUCGAUCG', 'UCGAUCGAUCGAUCGA']
我正在修改它,以便dnasequences()中的DNA序列可以具有任何可變長度。
我靠近這個:
dnasequences = [
'GCTAGCTA',
'CTAGCTAGCTAGCTAG',
'TAGCTAGCTAGCTAGC',
'AGCTAGCTAGCTAGCT'
]
xlate = {'G': 'C', 'C': 'G', 'T': 'A', 'A': 'U'}
def dna2rna(sequences):
rnalist = [xlate[n] for sequence in sequences for n in sequence]
seqlen = [len(sequence) for sequence in sequences]
return rnalist, seqlen
def printxlate(rnasq, lens):
index = 0
for i in range(0, len(rnasq), lens[index]):
print([''.join(rnasq[i:i+lens[index]])])
index += 1
rnasequences, seqlens = dna2rna(dnasequences)
printxlate(rnasequences, seqlens)
它打印前兩個翻譯的正確序列,但開始與第三它是關閉(雖然我有第二個問題:在第二個程序版本我得到一個單獨的列表中dnasequences每個序列(),其中 我不想要的。我想和像在第一個版本四個元素的單個列表。)
在第一迭代i = 0 在第二迭代i = 8。到目前爲止這麼好。
但在第三次迭代(在PyCharm調試器)我看到,我= 16 我相信它應該是24.既然不是,第三和第四翻譯 是錯誤的,它的錯誤了與'索引超出範圍'錯誤。
如果第三次迭代是i = 24,第四次i = 40,它就會起作用。
我只是不明白爲什麼它得到的前兩個迭代正確,然後開始失敗的第三。
在第一個程序'我'步驟通過0,16,32和48就好了。
不幸的是,我無法理解你的解決方案(我仍然很新的這一點)。你做了什麼修改第二個程序?謝謝。 – MarkS
修改是將'for n in sequence'移動到列表理解的開頭,這樣就不會使結果變平。 – Psidom
今天早上再次用一雙新的眼睛看着它。現在,我將對您的第二個解決方案進行修改。此外,maketrans()的文檔說明翻譯必須具有相同的長度:「注意:intab和outtab都必須具有相同的長度。」通過我的第二個解決方案,您可以進行一對多翻譯。謝謝! – MarkS