python - 字符串中子字符串的基本索引重复(python)

标签 python list indexing

我正在自学基本编程。
一个简单的项目是查找字符串中子字符串的重复索引。例如,在字符串“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

我的推理思路是这样的。我将字符串和子字符串转换为列表。这允许对字符串中的每个字母进行索引。我设置 i 和 j = 0——这些将分别是字符串和子字符串索引中的第一个值。我还有一个新变量 counter,我将其设置为 = 0。基本上,我使用 counter 来计算位置 [i] 中的字母等于位置 [j] 中的元素的次数。如果 counter 等于子字符串的长度,那么我知道 [i - len(substring) + 1] 是子字符串开始的位置,因此我将其添加到名为 results 的列表中。然后我重置 counter 和 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

关于python - 字符串中子字符串的基本索引重复(python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6987702/

相关文章:

Python 列表不反射(reflect)变量变化

python - 如何在 python 中创建 2-way 表?

jquery - 制作餐厅菜单,但点和 <sup> 不起作用

c - 使指针指向数组的末尾

database - 自适应基数树

python - 使用 Python 通过 GPIO 对 Raspberry Pi 进行 LED 控制

python - 在Python中计算数组幂集最快的方法是什么?

jQuery - 显示元素列表后按类别对其进行排序

list - 验证列表的所有元素是否相等

mysql - 可以使用哪些索引来改进此查询?