如何用python查找子串所在位置-成都创新互联网站建设

关于创新互联

多方位宣传企业产品与服务 突出企业形象

公司简介 公司的服务 荣誉资质 新闻动态 联系我们

如何用python查找子串所在位置

本篇内容主要讲解“如何用python查找子串所在位置”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何用python查找子串所在位置”吧!

成都创新互联是一家成都网站建设、做网站,提供网页设计,网站设计,网站制作,建网站,按需网站策划,网站开发公司,2013年开创至今是互联行业建设者,服务者。以提升客户品牌价值为核心业务,全程参与项目的网站策划设计制作,前端开发,后台程序制作以及后期项目运营并提出专业建议和思路。

示例代码

string = "abcdcdefg"
print string.index('cde')

用index方法实现一个查找子串所在位置的方法,看下面两个字符串:

string = "abcdcdefg"
sub = "cde"

通过观察你会发现,sub这个字符串在string是存在的,且起始位置为4,这就是我们要获得的结果。

逻辑分析
  • sub的第一个字符是c,我应该先在string中找到一个字符c,这个位置可能就是子串cde开始的位置,当然也可能不是,string中就有一段是cdc,前两个字符确实一样,但是第三个字符不一样,不过没关系,我们先把string中的c字符找到再说

  • 在string中找到c这个字符后,应该接着比较剩余的部分,如果剩余的部分都对应得上,便找到了子串的开始位置

示例代码

#coding=utf-8
string = "abcdcdefg"
sub = "cde"
i = 0
#注意这种赋值方式,简单,不用写多行
string_len,sub_len = len(string),len(sub)
# 记录子串的起始位置
index = -1

# 循环无处不在
while i < string_len:
   # 一定要先找到和sub[0]相等的字符
   if string[i] == sub[0]:
       index,m = i,i
       j = 0
       #接下来要比较剩余的部分
       while j< sub_len and m < string_len \
               and string[m] == sub[j]:
           m += 1
           j += 1

       # 最精妙的地方是这段代码
       if not j == sub_len:
           index = -1
       else:
           break

   i += 1

print index

程序分析
  • string_len,sub_len = len(string),len(sub) 是非常便捷的变量赋值方式,如果不这么写,就得分成两条语句

  • 对于while 循环,与for循环不同的地方在于,你必须牢牢的控制循环的条件,也就是while 后面所跟着的表达式,它们决定了循环何时结束

  • 在第二个while循环开始前,我创建了一个名为m的变量,而没有继续使用i作为比较时所用的索引,这是因为i被用来控制外层的while循环,如果我在第二个循环里执行了i += 1,就会影响到第一个while循环,不要忘记第一个while循环是用来寻找和sub[0] 相等的字符位置的,如果i被无故的加1 了,那么第一个while循环时必然会有某一个字符没有被遍历到

  • 程序最精妙的地方在于 if not j == sub_len: 我如何知道在第二个while循环结束后就匹配到了子串呢?如果j的值和sub_len相等,就说明子串被匹配到了,因为在循环结束后,j 等于 sub_len,说明sub的每一个字符都被遍历到了,而且与string中的某一部分一一对应,否则,循环会因为不满足条件而中断。我让index 在第二个while循环开始前就等于i,这样,便记录了子串可能开始的位置,如果j确实等于sub_len了,那么index 就是子串开始的位置,如果 j 与 sub_len 不相等,index 的值就不是子串的开始位置,因此要重新赋值为-1

  • break只有在找到子串开始位置时才会执行,因为我不想继续找了,即便后面还有子串

到此,相信大家对“如何用python查找子串所在位置”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


标题名称:如何用python查找子串所在位置
标题来源:http://kswsj.cn/article/gocgjj.html

其他资讯