這個函式將輸入的字串映射到一個字典中,并輸出結果。有什么想法嗎?
這可以通過遞回的方式來實作?def dna(seq)。
hashtable = {'A'/span>: 'U'/span>, 'G'/span>: 'C'/span>, 'T'/span>: 'A'/span>, 'C'/span>: 'G'}。
ans = '''
for i in range(len(seq))。
ans = hashtable[seq[i]]
return ans
print(dna('AGCTGACGTA'/span>)
謝謝你。
uj5u.com熱心網友回復:
你可以這樣做:
def dna(seq)。
if not seq:
return ''
return {'A: 'U'/span>, 'G'/span>: 'C'/span>, 'T'/span>: 'A'/span>, 'C'/span>: 'G'}[seq[0]] dna(seq[1:])
盡管這幾乎可以肯定會更慢,使用更多的記憶體,并且會碰到Python的遞回限制。對于幾乎所有的用例,推薦的方法是迭代;修改你的代碼,使用 Python 內置的字串連接:
def dna(seq)。
hashtable = {'A'/span>: 'U'/span>, 'G'/span>: 'C'/span>, 'T'/span>: 'A'/span>, 'C'/span>: 'G'}。
ans = []
for elem in seq:
ans.append(hashtable[elem])
return ''/span>.join(ans)
uj5u.com熱心網友回復:
你應該明白遞回并不總是答案。
在python中有一個最大的遞回深度,你可以改變它。但是你仍然會有一個限制。請看。https://stackoverflow.com/a/3323013/2681662
允許的最大遞回深度:
import sys
print(sys.getrecursionlimit() )
所以在你的情況下,迭代的方法更好。
還是讓我們來看看遞回版本是怎樣的吧。
對于一個遞回函式,你必須遵循簡單的規則:
對于一個遞回函式,你必須遵循簡單的規則。
- 創建一個退出條件 。
- 再次呼叫自己(函式) 。
def dna_r(seq)。
hashy = {'A'/span>: 'U'/span>, 'G'/span>: 'C'/span>, 'T'/span>: 'A'/span>, 'C'/span>: 'G'}。
if len(seq) == 1:
return hashy[seq] 。
return dna_r(seq[0]) dna_r(seq[1:] )
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/319330.html
標籤:
上一篇:遞回陣列.push()的問題
