0

该问题提供了一个大字符串和一个子字符串。而我要做的就是写一段代码,可以从大字符串中寻找子字符串,并输出找到的子字符串的.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)
4

2 回答 2

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)

尝试这个!这里第一个 if 条件用于检查数组索引越界异常

于 2019-04-08T17:05:54.523 回答
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]

我基于这个答案。这个解决方案的酷之处在于循环只需要运行n+1时间,其中 n 是文本中子字符串的数量。

于 2019-04-08T17:21:30.237 回答