我需要帮助来说明我在堆栈溢出中找到的此解决方案如何工作。为什么如果k = -1,您是否需要返回头寸。如果我将其更改为返回其他任何内容,则它将不起作用。谢谢。
def findSubstring(sequence, substring):
positions = []
k = 0
while k < len(sequence):
k = sequence.find(substring, k)
if k == -1:
return positions
else:
positions.append(k)
k += 1 #change to k += len(sub) to not search overlapping results
print(positions)
答案 0 :(得分:0)
str.find()
返回第一次出现的子字符串的索引(如果找到)。如果找不到,则返回-1。
这是findSubstring
函数中发生的事情:
首先,创建一个空列表,以便以后添加子字符串的出现索引。
while k < len(sequence)
:我们要查找子字符串,直到找到序列的最后一个索引。
k = sequence.find(substring, k)
:我们在索引k之后增加了子字符串的第一个匹配项的索引(对于第一次迭代,它应该是序列的开始,这就是设置k=0
的原因在while语句之前。)
现在,如果子字符串不在序列k=-1
中,则该子字符串出现的索引也不是。
if k == -1: return(positions)
:如果未找到子字符串,则返回k=-1
和空的positions
列表,否则将索引k附加到{{1 }}和positions
将确保在下一次迭代中,我们在刚找到索引tha之后寻找子字符串。
我们遍历k,直到到达序列的末尾(k +=1
)
while k len(sequence)
:该函数返回索引列表,最后我们将其打印出来。