我正在尝试重新创建s.find('substring')函数。我遇到的两个问题如下:
1)找到起始索引的能力,例如:
Enter a phrase please"my best test ever!"
Enter a word you wish to find"best"
found first instance of letter at, 0
found first instance of letter at, 19
>>>
2)假设找到了正确的索引,我希望此代码段指示是否或
并非整个子字符串都在字符串中:
str2 in str1[i:len(str1)]
每当我在空闲时独立于主循环测试它时,它就无法正常工作。
这是我的主要代码:
str1 = input("Enter a phrase please")
str2 = input("Enter a word you wish to find")
for i in range(len(str1)):
if str2[0] == str1[i]:
print("found first instance of letter at, ", i)
str2 in str1[i:len(str1)]
非常感谢任何建议,谢谢伙伴们!
答案 0 :(得分:2)
你的循环应该可以正常工作,但你没有对str2 in str1[..]
测试做任何事情,也没有正确计算终点;你想在这里使用str2
的长度,真的。
您可以直接在str1
上循环,并使用enumerate()
function添加索引。您需要将len(str2)
结果添加到i
以查找端点,并使其打印出测试结果;我在这里使用了==
,因为结果切片应该是相同的字符串:
for i, char in enumerate(str1):
if str2[0] == char:
print("found first instance of letter at,", i)
print(str2 == str1[i:i + len(str2)])
演示:
>>> str1 = 'my best test ever!'
>>> str2 = 'best'
>>> for i, char in enumerate(str1):
... if str2[0] == char:
... print("found first instance of letter at, ", i)
... print(str2 == str1[i:i + len(str2)])
...
found first instance of letter at, 3
True
答案 1 :(得分:0)
如果您想要一个不使用Python提供的任何精彩工具的算法演示,请查看Knuth-Morris-Pratt方法。
这里,粗略地用Python实现,好像Python是Assembly:
#0 1 2
#0123456789012345678901234
S='dcdcacdcdeerecdabcddfdabc'
W= 'abc' # ^^^
m=0
i=0
while True:
if m+i==len(S):
break
if W[i]==S[m+i]:
if i==len(W)-1:
print 'MATCH!', m
i=0
m+=1
else:
i+=1
else:
i=0
m+=1
打印:
MATCH! 15
MATCH! 22