该问题提供了一个大字符串和一个子字符串。我要做的是编写一个代码,可以从大字符串中查找子字符串,并输出找到的子字符串的.start()位置。 例如: 样本数据集 GATATATGCATATACTT ATAT 样本输出 2 4 10
所以我写了一个代码(如下所示),但是,我注意到该代码会跳过示例数据集中的位置4,因为位置4的一半在2中?
请告诉我如何解决此问题。提前非常感谢!
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)
答案 0 :(得分:0)
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)
尝试一下! 如果条件用于检查数组索引超出范围的异常,则为1st
答案 1 :(得分:0)
这无需使用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是文本中子字符串的数量。