在字符串中查找字符串-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)]