这个问题提供了一个大字符串和一个子字符串。我要做的是编写一个代码,可以从大字符串中查找子字符串,并输出找到的子字符串的.start()位置。例如:样本数据集GATATATGCATATACTT ATAT样本输出2 4 10
所以我编写了一个代码(如下所示),但是,我注意到代码会跳过示例数据集中的第4位,因为第4位的一半是2?
请告诉我如何解决这个问题。非常感谢sooooo !!!
import re
filename = open(input())
txt=filename.readline()
rlist=[]
text= "ATAT"
for m in re.finditer (text, txt):
d = m.start()
d += 1
rlist.append(d)
print (rlist)
length=len(text)
rlist=[]
for i in range(len(txt)):
if length+i < len(txt):
if txt[i:i+length] == text:
rlist.append(i+1)
print (rlist)
试试这个!这里第一个条件用于检查数组索引超出绑定异常
这将在不使用re的情况下工作。请注意,我注释掉了您的文件导入部分,以便您可以只测试找到文本的片段。
#filename = open(input())
#txt=filename.readline()
txt='GATATATGCATATACTTATAT'
rlist=[]
text= "ATAT"
index=0
rlist=[]
while index < len(txt): #loop through the text advancing one character at a time
index = txt.find(text, index)
if index == -1:
break
rlist.append(index+1)
index += 1 # increment the index
print(rlist)
Out: [2, 4, 10, 18]
我的答案基于this。这个解决方案的优点是循环只需要运行n+1
次,其中n是文本中子串的数量。