天天看點

python中字元串索引_字元串中子字元串的基本索引重複(python)

我正在努力教自己基礎程式設計.

一個簡單的項目是查找字元串中子字元串的重複索引.是以例如,在字元串“abcdefdef”和子串“def”中,我希望輸出為3和6.我有一些代碼寫,但我沒有得到我想要的答案.以下是我寫的

注意:我知道可能有更簡單的方法來生成結果,利用該語言的内置功能/包,例如正規表達式.我也知道我的方法可能不是最佳算法.從來沒有,在這個時候,我隻是在尋求修複以下邏輯的建議,而不是使用更多慣用的方法.

import string

def MIT(String, substring): # "String" is the main string I'm searching within

String_list = list(String)

substring_list = list(substring)

i = 0

j = 0

counter = 0

results = []

while i < (len(String)-1):

if [j] == [i]:

j = j + 1

i = i + 1

counter = counter + 1

if counter == len(substring):

results.append([i - len(substring)+1])

counter = 0

j = 0

i = i+1

else:

counter = 0

j = 0

i = i+1

print results

return

我的推理是這樣的.我将String和子字元串轉換為清單.這允許索引字元串中的每個字母.我設定i和j = 0 – 這些将分别是我在String和substring索引中的第一個值.我還有一個新的變量counter,我将其設定為0.基本上,我使用計數器來計算位置[i]中的字母等于位置[j]中的元素的次數.如果counter等于substring的長度,那麼我知道[i-len(substring)1]是我的子串開始的位置,是以我将它添加到名為results的清單中.然後我重置計數器和j并繼續搜尋更多的子串.

我知道代碼很尴尬,但我認為我仍然可以得到答案.相反,我得到:

>>> MIT("abcdefghi", "def")

[[3]]

>>> MIT("abcdefghi", "efg")

[[3]]

>>> MIT("abcdefghi", "b")

[[1]]

>>> MIT("abcdefghi", "k")

[[1]]

有什麼想法嗎?