在字符串中查找字符串-Python
我试图实现一个递归地在字符串中查找文本的函数 我试过这个,但我不知道为什么它不起作用。请注意,我是新的编码在字符串中查找字符串-Python,python,string,Python,String,我试图实现一个递归地在字符串中查找文本的函数 我试过这个,但我不知道为什么它不起作用。请注意,我是新的编码 def find(text, substring): if len(text) == 0: return 0 while substring[0] in text: return find(text, substring[1:]) 谢谢!:) 示例: find("mississippi", "sip") True find("to be or not to b
def find(text, substring):
if len(text) == 0:
return 0
while substring[0] in text:
return find(text, substring[1:])
谢谢!:)
示例:
find("mississippi", "sip")
True
find("to be or not to be", "be")
True
find("mississippi", "sup")
False
您需要一个递归函数的基本情况,它最终将不递归地返回。除非第一次执行,否则基本情况
len(text)==0
永远不会执行。有更简单的方法。例如,您可以循环字符串的索引并检查子字符串是否位于该位置,如前所述:
这将计算为
string
中出现的所有substr
的索引列表如果我正确理解您的问题,您希望实现一个递归函数,其中查找(文本,子字符串)
,给定两个字符串,返回与文本中的简单Python表达式子字符串相同的结果。此问题的递归分解为:
文本
是否以子字符串
开头?如果是,则返回True
。(基本情况1)
文本是否为空?如果是,则返回False
。(基本情况2)
- 否则,返回
find(text[1:],substring)
的结果——在这种递归情况下,我们对较小的问题调用相同的函数
看看你能不能实现!对于基本情况一,您将很好地使用Python的字符串方法startswith
(谷歌搜索!)。预期的结果是什么,您得到的结果是什么?对于到达字符串结尾的时间,您有一个基本情况,但对于找到匹配的时间,您也需要一个基本情况。@GregPrisament您的意思是“当没有找到匹配项时”?快速查找子字符串并不是一项简单的任务,递归算法会产生O(n^2)算法。使用Knuth-Patterson算法,可以实现O(n)线性时间。有一个基本情况。如果函数没有运行return
语句,那么它将返回None
@KSFT,是的。OP需要阐明所需的结果;此函数永远不会返回True。
[i for i in range(len(string)) if s.startswith(substr,i)]