字符串中子字符串的基本索引重复(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]]

有什么想法吗?

解决方法:

正则表达式模块(re)更适合此任务.

好参考:
http://docs.python.org/howto/regex.html

也:
http://docs.python.org/library/re.html

编辑:
更“手动”的方式可能是使用切片

s = len(String)
l = len(substring)
for i in range(s-l+1):
    if String[i:i+l] == substring:
        pass #add to results or whatever
上一篇:使用mysql处理非常大的数据


下一篇:在Python中选择一系列列