查找子字符串的方法

我知道在python中有一个in运算符,可用于检查字符串中是否存在任何子字符串或char。我想通过检查每个字符串(长度为子字符串)来做到这一点。下面的代码是唯一的方法还是我可以实现此目的的任何其他方法?


m = "college"

s = "col"

lm = len(m)

ls = len(s)

f = 0


for i in range(lm):    

    if (i+ls) <= lm:

        if s == m[i:(i+ls)]:            

            global f

            f = 1

            break

if f:

    print "present"

else:

    print "not present"

我在这里做的是,如果我的子字符串是col,我的程序通过从主字符串的开始到结尾移动来检查带有子字符串的长度子字符串,并返回true与否。


col

oll

lle

leg

ege              


哔哔one
浏览 215回答 3
3回答

一只萌萌小番薯

您可以尝试这样的事情:In [1]: m = 'college'In [2]: s = 'col'In [3]: if any(m[i:i+len(s)] == s for i in range(len(m)-len(s)+1)):&nbsp; &nbsp;...:&nbsp; &nbsp; &nbsp;print 'Present'&nbsp; &nbsp;...: else:&nbsp; &nbsp;...:&nbsp; &nbsp; &nbsp;print 'Not present'&nbsp; &nbsp;...:&nbsp; &nbsp; &nbsp;Present在这里any检查每个m长度的子字符串,len(s)看看是否相等s。如果是这样,它将返回True并停止进一步的处理(这称为“短路”,与break您上面的操作非常相似)。any如果我们将其替换为列表理解并进行相等比较,则该部分的外观如下:In [4]: [m[i:i+len(s)] for i in range(len(m)-len(s)+1)]Out[4]: ['col', 'oll', 'lle', 'leg', 'ege']

缥缈止盈

您的代码是快速实现常规子字符串搜索的合法方法,但不是唯一的方法。更高效的算法包括Boyer-Moore字符串搜索,Knuth-Morris-Pratt搜索或使用DFA实现的搜索。这是一个很大的话题,您的问题并不清楚您实际上要获得什么样的信息。对于Python,当然,最简单in的方法是简单地使用运算符和相关方法,str.find并且str.index所有这些方法都部署了简化的Boyer-Moore。

天涯尽头无女友

您不需要global那里。另外,你可以In [1]: %pastem = "college"s = "col"In [2]: 'not ' * all(s != m[i:i+len(s)] for i in range(1+len(m)-len(s))) + 'present'Out[2]: 'present'但实际上您当然应该这样做s in m,
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python