![ced52d4789c9ca83ce85228e913cb5cb.png](https://img-blog.csdnimg.cn/img_convert/ced52d4789c9ca83ce85228e913cb5cb.png)
前言
文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
作者:陈YL
PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http://t.cn/A6Zvjdun
count是Python内置的一个统计函数,作用是统计一个字符串中特定子串的数量,并返回一个int类型。
str. count(sub, start, end)
- str:字符串
- sub:要统计的子串
- start:搜索的起始位置(默认为0)
- end:搜索的结束位置
![4c977a6f711f8d33de6bc46816d79596.png](https://img-blog.csdnimg.cn/img_convert/4c977a6f711f8d33de6bc46816d79596.png)
这个函数内部的实现逻辑是怎么样的呢?
想象工厂里的产品检测流水线,字符串被看做产品放在流水线上,可以移动,而要统计的子串固定不变,作为参照。
![cf8399c52c77ec5643d2783d46f70330.gif](https://img-blog.csdnimg.cn/img_convert/cf8399c52c77ec5643d2783d46f70330.gif)
将字符串的开头与子串的开头对齐,从第一个字符开始匹配。如果相等,则继续匹配子串的下一个字符;如果不相等,则将字符串向前移动一位,继续匹配。
每匹配成功一个子串,数量就+1,然后继续移动字符串,寻找下一个子串。因此,还需要定义一个计数器,来统计子串出现的次数。
由此可以发现,我们需要两个循环来实现这一过程:外层循环负责移动字符串和计数,内层循环负责匹配子串的每一个字符。
![b3edb45219df697a7065ed71c24297ba.png](https://img-blog.csdnimg.cn/img_convert/b3edb45219df697a7065ed71c24297ba.png)
代码实现
先把匹配过程列成一张表,从中找出规律。
回到最开头那个例子,从“黑白黑白白黑黑白黑白”中找出有多少个“黑”。这是最简单的一种情况——找长度为1的子串的数量。匹配过程如下:
![64a458ebb68fed129a1c357ba3fe4ab0.png](https://img-blog.csdnimg.cn/img_convert/64a458ebb68fed129a1c357ba3fe4ab0.png)
然后把难度升级一下,在“This is my friend”这个字符串中,找长度为2的子串“is”的数量。
匹配过程如下:
![c116ef3a1f8db727a3ca689cae3006e0.png](https://img-blog.csdnimg.cn/img_convert/c116ef3a1f8db727a3ca689cae3006e0.png)
继续增加子串的长度,就可以得出规律:
当: target[t_index] == source[index+t_index],
且t_index == len[target]时,
就说明成功找到了一个子串,这时候内层循环结束,程序执行下一步,同时计数器count += 1。
这是代码执行中最关键的一步。明白之后,尝试画了一下流程图:
![b54bffe6b45197a244dd91e4aaabc0d6.png](https://img-blog.csdnimg.cn/img_convert/b54bffe6b45197a244dd91e4aaabc0d6.png)
然后就是代码部分。第一次是照着答案敲的,基本理解不了,还是练习太少的原因。后来经过Debug、草稿纸画流程图,总算基本摸清了代码的逻辑。(有一丢丢成就感吧
)
![0f836d11ef96c7d98072f87741a14d75.png](https://img-blog.csdnimg.cn/img_convert/0f836d11ef96c7d98072f87741a14d75.png)
![6fe2b1236d654d9b45de42722fbaa8d4.png](https://img-blog.csdnimg.cn/img_convert/6fe2b1236d654d9b45de42722fbaa8d4.png)
这段代码最精髓的部分是内层循环里面的break语句,只要target[t_index] != source[index + t_index],即子串字母与字符串不匹配,就会直接退出内层循环,这个时候t_index就不可能等于len(target),必然会执行index += 1。(一开始理解不了
)
![e1cd85f3fd4dff92ed5e1941a6ee2763.png](https://img-blog.csdnimg.cn/img_convert/e1cd85f3fd4dff92ed5e1941a6ee2763.png)
2020年最新Python教程:
如果你处于想学Python或者正在学习Python,Python的教程不少了吧,但是是最新的吗?
说不定你学了可能是两年前人家就学过的内容,在这小编分享一波2020最新的Python教程。
![6886334d5ecc98b903a9a41e63161e87.png](https://img-blog.csdnimg.cn/img_convert/6886334d5ecc98b903a9a41e63161e87.png)
![0c73304f9cc57d43b0382c4ff7996f01.png](https://img-blog.csdnimg.cn/img_convert/0c73304f9cc57d43b0382c4ff7996f01.png)
![30f5c3a3ca3b4c96363d1180ef9e456c.png](https://img-blog.csdnimg.cn/img_convert/30f5c3a3ca3b4c96363d1180ef9e456c.png)
![742df1b5d472e4f82fae3cde4be41f11.png](https://img-blog.csdnimg.cn/img_convert/742df1b5d472e4f82fae3cde4be41f11.png)
以上这些教程小编已经为大家打包准备好了,希望对正在学习的你有所帮助!