我正在尝试查找一个字符串是否存在于另一个字符串中,不使用Python的预定义函数,例如find和index。
目前我的函数有两个参数,其中一个是我们要搜索的字符串,另一个字符串是我们要在第一个字符串中寻找的内容。
如果第二个字符串存在于第一个字符串中,我希望我的函数返回它在第一个字符串中出现的所有位置。
目前,我的函数能够找到第一次出现并返回索引,但我想找到多个出现而不仅仅是第一个。
以下是我的代码:
目前我的函数有两个参数,其中一个是我们要搜索的字符串,另一个字符串是我们要在第一个字符串中寻找的内容。
如果第二个字符串存在于第一个字符串中,我希望我的函数返回它在第一个字符串中出现的所有位置。
目前,我的函数能够找到第一次出现并返回索引,但我想找到多个出现而不仅仅是第一个。
以下是我的代码:
def multi_find (s, r):
s_len = len(s)
r_len = len(r)
if s_len < r_len:
n = -1
else:
m = s_len - r_len
n = -1 # assume r is not yet found in s
i = 0
while n == -1 and i < m:
# search for r in s until not enough characters are left
if s[i:i + r_len] == r:
n = i
else:
i = i + 1
print (n)
multi_find("abcdefabc. asdli! ndsf acba saa abe?", "abc")
现在,输出的结果只是“0”,因为那里是第一次出现 abc 的位置。我该如何让它返回“0”和“6”(第二次出现的开头)?也就是说,在找到一个之后继续检查。
我想到了一种方法,就是创建一个包含所有出现位置的列表,然后将 i 添加到该列表中,但是当我尝试这样做时,没有成功。
enumerate()
允许您迭代字符串的位置和字符,但我们没有使用字符。因此,我们只是在迭代字符串中的每个位置。您还可以编写for i, c in enumerate(haystack):
以同时迭代字符串的每个位置i
和每个字符c
。 - Simeon Visser