【Python 千题 —— 算法篇】字符统计

请添加图片描述

Python 千题持续更新中 ……
脑图地址 👉:⭐https://twilight-fanyi.gitee.io/mind-map/Python千题.html⭐

字符串处理

题目背景

在编程中,对字符串的字符统计是一个常见任务。这在文本处理、数据分析、词频统计、自然语言处理等领域有广泛应用。无论是统计字母出现的频率,还是分析不同字符类型的数量,字符串字符统计都是非常有用的技术。

字符统计可以帮助我们更好地理解数据的分布情况,进而做出有针对性的优化。通过这个问题的学习,能够让我们更熟悉字符串的处理技巧,提升在实际项目中处理复杂文本数据的能力。

题目描述

编写一个函数 char_count(),接收一个字符串 s 作为输入,统计字符串中各种字符的出现频率,包括字母、数字、空格、符号等。

函数需满足以下要求:

  1. 定义函数 char_count(s),返回一个字典,键为字符类别(如字母、数字、空格等),值为该类别字符的出现次数。
  2. 字符类别包括:字母、数字、空格、符号。
  3. 输入为空字符串时,返回一个空字典。

输入描述

  • 一个字符串 s,包含字母、数字、空格、标点符号等。

输出描述

  • 返回一个字典,表示不同类别字符的统计结果。

示例

示例 ①

输入:

# 调用 char_count() 函数
print(char_count("Hello, World! 123"))

输出:

{'letters': 10, 'digits': 3, 'spaces': 2, 'symbols': 2}
示例 ②

输入:

print(char_count("   "))

输出:

{'letters': 0, 'digits': 0, 'spaces': 3, 'symbols': 0}

代码讲解与多种解法

解法一:使用循环和条件判断统计字符

最直接的解法是通过遍历字符串中的每个字符,使用条件判断来统计字符属于哪种类别。Python 提供了一些内置方法,比如 char.isalpha() 判断是否为字母,char.isdigit() 判断是否为数字等。这些函数可以帮我们快速判断字符的类型。

def char_count(s):if not s:return {}counts = {'letters': 0, 'digits': 0, 'spaces': 0, 'symbols': 0}for char in s:if char.isalpha():counts['letters'] += 1elif char.isdigit():counts['digits'] += 1elif char.isspace():counts['spaces'] += 1else:counts['symbols'] += 1return counts

优点:

  • 代码清晰明了,结构简单,容易理解。
  • 适用于小型字符串的处理,直接判断字符类型。

缺点:

  • 每次都需要手动判断字符类别,代码稍显冗长。
  • 对于非常长的字符串,效率可能不是最优。

解法二:使用 collections.Counter 辅助统计

在统计字符时,可以使用 collections.Counter 来帮助我们进行频率统计。虽然 Counter 主要用于计数具体字符,但我们可以通过将字符按类别进行分组,从而更方便地实现字符统计。

from collections import Counterdef char_count(s):if not s:return {}counts = Counter(s)result = {'letters': 0, 'digits': 0, 'spaces': 0, 'symbols': 0}for char, count in counts.items():if char.isalpha():result['letters'] += countelif char.isdigit():result['digits'] += countelif char.isspace():result['spaces'] += countelse:result['symbols'] += countreturn result

优点:

  • 使用 Counter 进行统计,代码更加简洁,减少了手动操作。
  • 可以在统计的同时进行分类,避免遍历两次。

缺点:

  • 对字符的类别依然需要手动判断。

解法三:使用正则表达式(Regex)

正则表达式是处理字符串的强大工具。我们可以通过正则表达式来匹配不同类别的字符,如匹配字母、数字、空格、符号等,从而进行分类统计。

import redef char_count(s):if not s:return {}letters = len(re.findall(r'[a-zA-Z]', s))digits = len(re.findall(r'\d', s))spaces = len(re.findall(r'\s', s))symbols = len(s) - (letters + digits + spaces)return {'letters': letters, 'digits': digits, 'spaces': spaces, 'symbols': symbols}

优点:

  • 通过正则表达式匹配,代码更加灵活和简洁。
  • 一次性匹配出字符类别,避免了逐个字符判断。

缺点:

  • 正则表达式的可读性相对较差,尤其是对于不熟悉正则的读者来说。

总结与思考

在字符串字符统计的过程中,不同的实现方式有不同的优缺点。我们可以根据应用场景选择最合适的方法:

  1. 手动判断字符类别:适合初学者,逻辑清晰,容易掌握。
  2. 使用 collections.Counter:当我们需要频率统计的同时进行分类时,它提供了简洁的实现方式。
  3. 正则表达式:适合需要复杂模式匹配和处理的场景,在处理特殊字符和规则时非常强大。

无论采用哪种方式,字符统计是编程中的一项基础技能,尤其在数据处理、文本分析等领域有广泛应用。掌握字符统计方法,不仅可以提高代码处理字符串的效率,还能更深入理解字符串结构,为后续的复杂操作打下良好基础。

扩展思考

字符统计问题不仅仅局限于统计字母、数字、符号等类别。在实际应用中,字符的统计还可以细化为特定语言的字符频率、词频统计、标点符号统计等。在自然语言处理(NLP)中,字符统计和分析是进行文本分析的基础步骤,如分词、词性标注、情感分析等。


通过本文的学习,你应该能够掌握几种常见的字符统计方法,并能够灵活应用在不同的场景中。希望你在编程中多多实践,不断提升自己处理字符串的技巧!

关注博客,解锁更多字符串处理技巧!
作者信息

作者 : 繁依Fanyi
CSDN: https://techfanyi.blog.csdn.net
掘金:https://juejin.cn/user/4154386571867191

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1527609.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

AI周报(9.1-9.7)

AI应用-Tidal 引领海洋养殖革命 Tidal团队,一个源自Alphabet X的创新项目,今年七月顺利从X实验室毕业,成为一家独立的公司。Tidal正在通过人工智能技术改变海洋养殖,特别是鲑鱼养殖。Tidal的总部位于挪威特隆赫姆,他们…

微信小程序和公众号的区别

微信小程序和公众号都是基于微信平台的两种不同应用形态,它们在展现形式、主要功能以及技术要求等方面存在显著区别。具体分析如下: 微信小程序和公众号的区别 展现形式 小程序:类似于APP的应用体验,用户可以通过扫一扫或者搜索…

数据结构——单链表实现和注释浅解

关于单链表的基础部分增删查改的实现和一点理解&#xff0c;写在注释里~ SList.h #pragma once #include<stdio.h> #include<stdlib.h> #include<assert.h>//定义节点的结构 //数据 指向下一个节点的指针 typedef int SLTDataType;typedef struct SListNo…

如何限制与管控员工上网行为?五个管控方法让员工效率倍增!

在现代企业中&#xff0c;互联网是工作中不可或缺的工具&#xff0c;但与此同时&#xff0c;员工在工作时间浏览与工作无关的网站、进行网络娱乐等行为&#xff0c;也成为了影响企业生产力和效率的主要因素之一。如何有效限制和管控员工的上网行为&#xff0c;从而提升工作效率…

解决ubuntu系统无法与FinalShell无法连接问题

问题 解决方案 先下载ubuntu网络工具 sudo apt install net-tools输入密码 下载完成后进入管理员模式查看密码 sudo -ihostname -I查看IP 得到ip地址后再继续安装 openssh-server 插件 sudo apt-get install openssh-server问题解决 尝试连接FinalShell

跨系统环境下LabVIEW程序稳定运行

在LabVIEW开发中&#xff0c;不同电脑的配置和操作系统&#xff08;如Win11与Win7&#xff09;可能对程序的稳定运行产生影响。为了确保程序在不同平台上都能正常且稳定运行&#xff0c;需要从兼容性、驱动、以及性能优化等多个方面入手。本文将详细介绍如何在不同系统环境下&a…

每日OJ_牛客_骆驼命名法(递归深搜)

目录 牛客_骆驼命名法&#xff08;简单模拟&#xff09; 解析代码 牛客_骆驼命名法&#xff08;简单模拟&#xff09; 骆驼命名法__牛客网 解析代码 首先一个字符一个字符的读取内容&#xff1a; 遇到 _ 就直接跳过。如果上一个字符是 _ 则下一个字符转大写字母。 #inclu…

从0开始深度学习(4)——线性回归概念

1 线性回归 回归&#xff08;regression&#xff09;指能为一个或多个自变量与因变量之间的关系进行建模。 1.1 线性模型 线性假设是指目标可以表示为特征的加权和&#xff0c;以房价和面积、房龄为例&#xff0c;可以有下面的式子&#xff1a; w称为权重&#xff08;weigh…

Centos7.9部署Gitlab-ce-16.9

一、环境信息 软件/系统名称版本下载地址备注Centos77.9.2009https://mirrors.nju.edu.cn/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.isogitlab-cegitlab-ce-16.9.1https://mirror.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-16.9.1-ce.0.el7.x86_64.rpm…

磁电偶极子天线学习1 一种60GHz 宽带圆极化口径耦合磁电偶极子天线阵列

摘要&#xff1a; 一种新型的圆极化口径耦合天线被提出。这种圆极化磁电偶极子天线由刻蚀在短路基片集成波导的一部分的宽臂上&#xff0c;并且很容易被集成基片。在工作频段内实现了宽于28.8%的阻抗带宽和宽带3-dB的25.9%的轴比和的增益。此外&#xff0c;因为圆极化辐射由两个…

win11如何录屏

在 Win11 中录屏可以使用系统自带的工具和一些第三方应用。以下是几种方法&#xff1a; 方法一&#xff1a;使用 Xbox Game Bar 1. 打开 Xbox Game Bar - 按 Win G 组合键打开 Xbox Game Bar。 2. 开始录制 - 在显示的界面中&#xff0c;点击“录制”按钮&#xff08;…

C++入门(06)安装QT并快速测试体验一个简单的C++GUI项目

文章目录 1. 清华镜像源下载2. 安装3. 开始菜单上的 QT 工具4. 打开 Qt Creator5. 简单的 GUI C 项目5.1 打开 Qt Creator 并创建新项目5.2 设计界面5.3 添加按钮的点击事件5.4 编译并运行项目 6. 信号和槽&#xff08;Signals and Slots&#xff09; 这里用到了C类与对象的很多…

知名AIGC人工智能专家培训讲师唐兴通谈AI大模型数字化转型数字新媒体营销与数字化销售

在过去的二十年里&#xff0c;中国企业在数字营销领域经历了一场惊心动魄的变革。从最初的懵懂无知到如今的游刃有余&#xff0c;这一路走来&#xff0c;既有模仿学习的艰辛&#xff0c;也有创新突破的喜悦。然而&#xff0c;站在人工智能时代的门槛上&#xff0c;我们不禁要问…

认知杂谈53

今天分享 有人说的一段争议性的话 I I 1.自助者天助 首先呢&#xff0c;咱得好好琢磨琢磨“自助者天助”这句话。这话说起来好像有点高深莫测的感觉&#xff0c;其实啊&#xff0c;道理特别简单。 就是说要是你自己都不乐意努力&#xff0c;那老天爷也不会平白无故地来帮你…

【Map】、集合总结

Map(*)——映射 比较之前的集合 List 为什么使用map <k,v>&#xff1a;key–value Api–>尽量用k去操作value put<k,v> package com.ffyc.map;import java.util.HashMap; import java.util.Map;/*** 映射*/ public class MapDemo {public static void main(St…

1 模拟——67. 二进制求和

1 模拟 67. 二进制求和 给你两个二进制字符串 a 和 b &#xff0c;以二进制字符串的形式返回它们的和。 示例 1&#xff1a; 输入:a "11", b "1" 输出&#xff1a;"100" 示例 2&#xff1a; 输入&#xff1a;a "1010", b "…

6.3图的遍历

图的遍历是指从某点出发,按照某种搜索方式沿着边访问图中所有节点 图的遍历算法主要有两种:广度优先,深度优先 都需要辅助数组visited[]来记录节点是否被访问过 6.3.1广度优先搜索 like层次遍历,需要辅助队列 代码实现 #include<stdio.h> #define maxnum 15 bool vi…

PMP–一、二、三模–分类–14.敏捷–技巧–看板面板与燃尽图燃起图

文章目录 技巧一模14.敏捷--方法--看板&#xff08;类似卡片&#xff09;1、 [单选] 根据项目的特点&#xff0c;项目经理建议选择一种敏捷方法&#xff0c;该方法限制团队成员在任何给定时间执行的任务数。此方法还允许团队提高工作过程中问题和瓶颈的可见性。项目经理建议采用…

【国赛急救包】数模国赛查重规则及降重技巧

国赛已经快接近尾声了&#xff0c;各位宝宝论文写得怎么样啦~ 今天为大家分享关于国赛查重的一些规则&#xff0c;以及降重技巧&#xff01;快收藏起来吧~ 1. 国赛查重要求及如何查重 • 数学建模国赛的查重除了知网数据库以外&#xff0c;更重要的是自建库的查重比对&#x…

vLLM (4) - LLMEngine上篇

系列文章目录 vLLM (1) - Qwen2推理&部署 vLLM (2) - 架构总览 vLLM (3) - Sequence & SequenceGroup vLLM (4) - LLMEngine上篇 vLLM (5) - LLMEngine下篇 文章目录 系列文章目录前言一、类图二、LLM三、LLMEngine四、GPUExectuor五、Worker六、ModelRunner七、Cache…