find や index.. などの Python の定義済み関数を使用せずに、文字列が別の文字列に存在するかどうかを確認しようとしています。
現在、私の関数は 2 つの文字列をパラメーターとして取ります。1 つは検索する文字列で、もう 1 つの文字列は最初の文字列で探しているものです。
2 番目の文字列が最初の文字列に存在する場合、関数が最初の文字列で発生するすべての位置を返すようにします。
現在、私の関数は最初のオカレンスを見つけてインデックスを返すことができますが、最初のオカレンスだけでなく、複数のオカレンスを見つけたいと思っています。
以下は私のコードです:
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")
現時点では、abc が最初に発生する場所であるため、これは「0」のみを出力します。「0」と「6」(2 回目の発生の始まり) を返すようにするにはどうすればよいですか。
発生するすべての場所のリストを作成し、そのリストに i を追加するようなことを考えていましたが、それを試してみたところ、何もうまくいきませんでした。