【ROSALIND】【練Python,學(xué)生信】09 確定DNA子序列出現(xiàn)的位置

如果第一次閱讀本系列文檔請先移步閱讀【ROSALIND】【練Python,學(xué)生信】00 寫在前面 ?謝謝配合~

題目:
確定DNA子序列出現(xiàn)的位置
Given: Two DNA strings s and t (each of length at most 1 kbp).
所給:兩條DNA序列s和t,長度均不超過1kb。
Return: All locations of t as a substring of s.
需得:t是s的子序列,找到t在s中出現(xiàn)的所有位置。
?
測試數(shù)據(jù)
GATATATGCATATACTT
ATAT
測試輸出
2 4 10
?
背景
模序(Motif)通常指一段核酸或氨基酸序列,在具有同源性的基因或蛋白質(zhì)中重復(fù)出現(xiàn),具有其特征的序列,通常有生物學(xué)意義。分子生物學(xué)中的一個(gè)重要研究內(nèi)容就是定位模序出現(xiàn)的位置。
?
思路
Python中字符串雖然有.find()方法,但僅能返回子串第一次出現(xiàn)的位置,因此需要自己編寫命令查找。我選用的方法是將與子串長度相同的字符串挨個(gè)取出比較,相同則輸出位置。
?
Python知識點(diǎn)
一個(gè)字符在某字符串中的位置是指其左側(cè)所有字符的數(shù)目(包括其自身),Python計(jì)數(shù)時(shí)從0開始。
?
代碼
f = open('rosalind_subs.txt', 'r')
s = f.readlines()
f.close()
seq1 = s[0].strip()
seq2 = s[1].strip()
i = 0
while i < len(seq1)-len(seq2):
??? if seq1[i:i+len(seq2)] == seq2:
??????? print(i+1, end=" ")
??? i = i + 1