前言

文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

作者:陈YL

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http://t.cn/A6Zvjdun

count是Python内置的一个统计函数,作用是统计一个字符串中特定子串的数量,并返回一个int类型。

str. count(sub, start, end)

  • str:字符串
  • sub:要统计的子串
  • start:搜索的起始位置(默认为0)
  • end:搜索的结束位置

这个函数内部的实现逻辑是怎么样的呢?

想象工厂里的产品检测流水线,字符串被看做产品放在流水线上,可以移动,而要统计的子串固定不变,作为参照。

将字符串的开头与子串的开头对齐,从第一个字符开始匹配。如果相等,则继续匹配子串的下一个字符;如果不相等,则将字符串向前移动一位,继续匹配。

每匹配成功一个子串,数量就+1,然后继续移动字符串,寻找下一个子串。因此,还需要定义一个计数器,来统计子串出现的次数。

由此可以发现,我们需要两个循环来实现这一过程:外层循环负责移动字符串和计数,内层循环负责匹配子串的每一个字符。

代码实现

先把匹配过程列成一张表,从中找出规律。

回到最开头那个例子,从“黑白黑白白黑黑白黑白”中找出有多少个“黑”。这是最简单的一种情况——找长度为1的子串的数量。匹配过程如下:

然后把难度升级一下,在“This is my friend”这个字符串中,找长度为2的子串“is”的数量。

匹配过程如下:

继续增加子串的长度,就可以得出规律:

当: target[t_index] == source[index+t_index],

且t_index == len[target]时,

就说明成功找到了一个子串,这时候内层循环结束,程序执行下一步,同时计数器count += 1。

这是代码执行中最关键的一步。明白之后,尝试画了一下流程图:

然后就是代码部分。第一次是照着答案敲的,基本理解不了,还是练习太少的原因。后来经过Debug、草稿纸画流程图,总算基本摸清了代码的逻辑。(有一丢丢成就感吧

这段代码最精髓的部分是内层循环里面的break语句,只要target[t_index] != source[index + t_index],即子串字母与字符串不匹配,就会直接退出内层循环,这个时候t_index就不可能等于len(target),必然会执行index += 1。(一开始理解不了

2020年最新Python教程:

如果你处于想学Python或者正在学习Python,Python的教程不少了吧,但是是最新的吗?

说不定你学了可能是两年前人家就学过的内容,在这小编分享一波2020最新的Python教程。

以上这些教程小编已经为大家打包准备好了,希望对正在学习的你有所帮助!

获取方式,私信小编 “ 资料 ”,即可免费获取哦!

统计子串数量,Python基础的更多相关文章

  1. python基础一 ------如何统计一个列表元素的频度

    如何统计一个列表元素的频度 两个需求: 1,统计一个随机序列[1,2,3,4,5,6...]中的出现次数前三的元素及其次数 2,统计一片英文文章中出现次数前10 的单词 两种方法: 1,普通的for循 ...

  2. python基础笔记-0

    python中数据结构,主要有列表.元组.字典.集合. python中最基本数据结构是序列(sequence).序列中每个元素被分配一个序号——即元素位置,也成为索引.第一个索引是0,第二个是1,以此 ...

  3. python基础之循环结构以及列表

    python基础之编译器选择,循环结构,列表 本节内容 python IDE的选择 字符串的格式化输出 数据类型 循环结构 列表 简单购物车的编写 1.python IDE的选择 IDE的全称叫做集成 ...

  4. Python基础(二) —— 字符串、列表、字典等常用操作

    一.作用域 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. 二.三元运算 result = 值1 if 条件 else 值2 如果条件为真:result = 值1如果条件为 ...

  5. 第五篇:python基础之循环结构以及列表

    python基础之循环结构以及列表   python基础之编译器选择,循环结构,列表 本节内容 python IDE的选择 字符串的格式化输出 数据类型 循环结构 列表 简单购物车的编写 1.pyth ...

  6. python基础之面向对象1

    一.面向对象VS面向过程 1.面向过程 2.面向对象 二.类与对象 1.类和对象 (1)基本概念 类和对象的内存图如下: 2.实例成员 (1)实例变量 (2)实例方法: 3.类成员: (1)类变量 ( ...

  7. Python基础教程 - Tdcqma

      1.1 普通字符串 1.21 错误与异常 1.41 XXXXXX 1.61 XXXXXX 1.81 XXXXXX 1.101 XXXXXX 1.2 转义字符串 1.22 装饰器         1 ...

  8. python基础班-淘宝-目录.txt

    卷 TOSHIBA EXT 的文件夹 PATH 列表卷序列号为 AE86-8E8DF:.│ python基础班-淘宝-目录.txt│ ├─1-1 Linux基础│ ├─01-课程简介│ │ 01-课程 ...

  9. 一、python基础相关知识体系

    python基础 a. Python(解释型语言.弱类型语言)和其他语言的区别? 一.编译型语言:一次性,将全部的程序编译成二进制文件,然后在运行.(c,c++ ,go) 运行速度快.开发效率低 二. ...

随机推荐

  1. snmap弱口令攻击利用

    科普Snmap: 简单网络管理协议(SNMP) 是专门设计用于在 IP 网络管理网络节点(服务器.工作站.路由器.交换机及HUBS等)的一种标准协议,它是一种应用层协议.具体废话就不多说了,自己百度去 ...

  2. CMDB_Agent_ssh版本分析

    目录 CMDB_Agent+ssh版本+server端 CMDB_Agent版本 CMDB概念 CMDB_Agent介绍 agent方案 ssh类方案 相比较 client端 架构目录 bin-sta ...

  3. 进制-Adding Two Negabinary Numbers

    2020-02-20 14:52:41 问题描述: 问题求解: 最开始的想法是将两个数字先转化成自然数在求和,最后转化回去,但是实际上这种方案是不可取的,主要的问题就是会爆掉. 那么就得按位进行运算了 ...

  4. Contest 161

    2019-11-03 20:35:18 总体感受:本周的赛题完全是反过来的,第一题最难,第二题次之,最后的hard反而是最简单的. 注意点:心态放平稳,慢慢来.

  5. xgboost安装与原理

    1.xgboost库的安装 先在网址https://www.lfd.uci.edu/~gohlke/pythonlibs/#xgboost 中下载whl文件,注意一定要下载跟自己当前安装Python版 ...

  6. 从零开始实现穿衣图像分割完整教程(附python代码演练)

    时装业是人工智能领域很有前景的领域.研究人员可以开发具有一定实用价值的应用.我已经在这里展示了我对这个领域的兴趣,在那里我开发了一个来自Zalando在线商店的推荐和标记服装的解决方案. 在这篇文章中 ...

  7. React Hooks Typescript 开发的一款 H5 移动端 组件库

    CP design 使用 React hooks Typescript 开发的一个 H5 移动端 组件库 English | 简体中文 badge button icon CP Design Mobi ...

  8. coding++:拦截器拦截requestbody数据如何防止流被读取后数据丢失

    1):现在开发的项目是基于SpringBoot的maven项目,拦截器的使用很多时候是必不可少的,当有需要需要你对body中的值进行校验,例如加密验签.防重复提交.内容校验等等. 2):当你开开心心的 ...

  9. SpringBoot 集成ehcache

    1, 项目实在springboot 集成mybatis 的基础上的: https://www.cnblogs.com/pickKnow/p/11189729.html 2,pom 如下,有的不需要加, ...

  10. 9.Maven的生命周期

    Clean Lifecycle: 在进行真正的构建之前进行一些清理工作. Default Lifecycle :构建的核心部分,编译,测试,打包,部署等等. Site Lifecycle : 生成项目 ...