为了账号安全,请及时绑定邮箱和手机立即绑定

查找子字符串的方法

查找子字符串的方法

哔哔one 2021-03-17 10:19:31
我知道在python中有一个in运算符,可用于检查字符串中是否存在任何子字符串或char。我想通过检查每个字符串(长度为子字符串)来做到这一点。下面的代码是唯一的方法还是我可以实现此目的的任何其他方法?m = "college"s = "col"lm = len(m)ls = len(s)f = 0for i in range(lm):        if (i+ls) <= lm:        if s == m[i:(i+ls)]:                        global f            f = 1            breakif f:    print "present"else:    print "not present"我在这里做的是,如果我的子字符串是col,我的程序通过从主字符串的开始到结尾移动来检查带有子字符串的长度子字符串,并返回true与否。colollllelegege              
查看完整描述

3 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

您可以尝试这样的事情:


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)):

   ...:     print 'Present'

   ...: else:

   ...:     print 'Not present'

   ...:     

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']


查看完整回答
反对 回复 2021-03-23
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

您的代码是快速实现常规子字符串搜索的合法方法,但不是唯一的方法。更高效的算法包括Boyer-Moore字符串搜索,Knuth-Morris-Pratt搜索或使用DFA实现的搜索。

这是一个很大的话题,您的问题并不清楚您实际上要获得什么样的信息。对于Python,当然,最简单in的方法是简单地使用运算符和相关方法,str.find并且str.index所有这些方法都部署了简化的Boyer-Moore。


查看完整回答
反对 回复 2021-03-23
?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

您不需要global那里。另外,你可以


In [1]: %paste

m = "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,


查看完整回答
反对 回复 2021-03-23
  • 3 回答
  • 0 关注
  • 214 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信