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