【ROSALIND】【练Python,学生信】09 确定DNA子序列出现的位置

如果第一次阅读本系列文档请先移步阅读【ROSALIND】【练Python,学生信】00 写在前面 谢谢配合~

题目:
确定DNA子序列出现的位置
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中出现的所有位置。
测试数据
GATATATGCATATACTT
ATAT
测试输出
2 4 10
背景
模序(Motif)通常指一段核酸或氨基酸序列,在具有同源性的基因或蛋白质中重复出现,具有其特征的序列,通常有生物学意义。分子生物学中的一个重要研究内容就是定位模序出现的位置。
思路
Python中字符串虽然有.find()方法,但仅能返回子串第一次出现的位置,因此需要自己编写命令查找。我选用的方法是将与子串长度相同的字符串挨个取出比较,相同则输出位置。
Python知识点
一个字符在某字符串中的位置是指其左侧所有字符的数目(包括其自身),Python计数时从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