Python字符串常用操作速查表(全面版v1.0 - 2025年11月12日修订)

news/2025/11/12 21:59:38/文章来源:https://www.cnblogs.com/wangya216/p/19215635

Python字符串常用操作速查表(全面版·v1.0 - 2025年11月12日修订)

📌 使用说明
时间复杂度:O(1)=常数级(快),O(n)=线性级(随数据量增长),O(k)=取决于传入可迭代对象长度
🔴 字符串(str)为不可变类型,所有"修改"操作均返回新字符串,原字符串保持不变
🔵 所有方法均不改变原字符串,需用变量接收返回值生效
⚠️ 通用警告:字符串索引越界会抛出IndexError;空字符串操作需避免无效访问;编码相关操作需注意字符集兼容性

一、字符串特性总览表

容器类型 核心特性 增删改查效率 适用场景 可哈希性 有序性说明
字符串(str) 不可变、字符序列、支持Unicode 增删改均O(n)(返回新串)、查索引O(1)/inO(n) 文本存储、格式化输出、数据处理 ✅ 可哈希 ✅ 索引有序:0-based索引访问,创建后顺序固定

二、字符串操作速查

(一)增/拼接操作

操作类型 具体操作 语法示例 功能描述 时间复杂度 注意事项
直接拼接 + 运算符 s1 + s2 拼接两个字符串,返回新串 O(n+k) ⚠️ 多次拼接效率低(频繁创建新对象),建议用join()
批量拼接 str.join(iterable) ','.join([s1, s2, s3]) 用当前字符串作为分隔符,拼接可迭代对象中所有元素 O(k) 🔵 可迭代对象元素必须为字符串类型;空字符串join()直接拼接所有元素
重复拼接 * 运算符 s * 3 重复字符串n次,返回新串 O(n×k) n为非负整数;n=0返回空字符串
格式化拼接 f-string f"name: {name}, age: {age}" 嵌入式变量/表达式拼接,支持格式控制 O(n) 3.6+版本支持;表达式需用{}包裹,格式符如:.2f(保留两位小数)
格式化拼接 str.format() "name: {}, age: {}".format(name, age) 占位符拼接,支持位置/关键字参数、格式控制 O(n) 兼容所有Python版本;占位符可指定索引(如{1})或关键字(如{age})
格式化拼接 % 格式化 "name: %s, age: %d" % (name, age) 旧式占位符拼接,按类型匹配参数 O(n) 兼容旧版本;常用格式符:%s(字符串)、%d(整数)、%f(浮点数)

(二)删/截取操作

操作类型 具体操作 语法示例 功能描述 时间复杂度 注意事项
截取子串 切片截取 s[start🔚step] 按索引范围+步长截取子串,返回新串 O(k) 🔵 左闭右开区间;start/end可省略(默认从头/到尾);step=-1反转字符串;支持负索引
删除首尾字符 str.strip(chars) s.strip(" ,") 删除首尾指定字符(默认删除空格/换行/制表符) O(n) 🔵 chars为字符集合(如" ,!"表示删除空格、逗号、感叹号);lstrip()仅删开头,rstrip()仅删结尾
过滤字符 推导式过滤 ''.join([c for c in s if cond]) 按条件筛选字符,保留符合要求的字符组成新串 O(n) ⚠️ 不可变特性,需通过join()重组;cond为筛选条件(如c.isdigit()保留数字)
替换删除 str.replace(old, new, count) s.replace("a", "", 2) 将指定字符/子串替换为空串(间接实现删除) O(n) count指定替换次数(默认全部替换);仅替换完全匹配的子串

(三)改/转换操作

操作类型 具体操作 语法示例 功能描述 时间复杂度 注意事项
大小写转换 str.upper() s.upper() 所有字符转为大写 O(n) 🔵 仅对字母有效,其他字符不变;对应lower()转为小写
大小写转换 str.lower() s.lower() 所有字符转为小写 O(n) 常用于不区分大小写的匹配场景(如s.lower() == target.lower())
大小写转换 str.title() s.title() 每个单词首字母大写,其余小写 O(n) 单词以非字母分隔(如空格、标点);示例:"hello world"→"Hello World"
大小写转换 str.capitalize() s.capitalize() 字符串首字母大写,其余小写 O(n) 仅第一个字符生效,后续字母无论是否分隔均小写
字符替换 str.replace(old, new, count) s.replace("ab", "xy", 3) 将old子串替换为new子串,返回新串 O(n) 🔵 count默认-1(全部替换);不可变特性,原串不变
字符编码 str.encode(encoding, errors) s.encode("utf-8", errors="ignore") 将字符串转为指定编码的字节串(bytes) O(n) encoding默认为utf-8;errors可选"ignore"(忽略错误)、"replace"(替换错误)
字节解码 bytes.decode(encoding, errors) b.decode("utf-8") 将字节串转回字符串(与encode()对应) O(n) 需与编码时的字符集一致,否则可能抛出UnicodeDecodeError
空格填充 str.ljust(width, fillchar) s.ljust(10, "-") 左对齐,右侧用fillchar填充至指定长度 O(n) width为最终字符串长度;rjust()右对齐,center()居中对齐;fillchar仅允许单个字符
数字格式化 str.zfill(width) s.zfill(5) 在字符串左侧填充0至指定长度(适合数字字符串) O(n) 若原串长度≥width,返回原串;支持带正负号的数字(如"-123"→"-0123")

(四)查/判断操作

操作类型 具体操作 语法示例 功能描述 时间复杂度 注意事项
索引访问 单个字符访问 s[i] / s[-1] 获取指定索引位置的字符 O(1) 🔵 支持负索引(-1表示最后一个字符);索引越界抛出IndexError
查找子串 str.find(sub, start, end) s.find("ab", 2, 10) 从左查找子串首次出现的索引,未找到返回-1 O(n×k) 🔵 支持范围查找(start/end指定查找区间);rfind()从右查找
查找子串 str.index(sub, start, end) s.index("ab") 从左查找子串首次出现的索引,未找到抛出ValueError O(n×k) 与find()区别:未找到时报错;rindex()从右查找
统计次数 str.count(sub, start, end) s.count("a", 1, 5) 统计子串在指定范围内出现的次数 O(n×k) 未找到返回0;支持范围限制(start/end可选)
包含判断 in / not in "ab" in s 判断子串是否存在于字符串中 O(n×k) 🔵 简洁直观,底层逻辑与find()类似
开头判断 str.startswith(prefix, start, end) s.startswith("http") 判断字符串是否以指定前缀开头 O(k) 🔵 prefix可是元组(如startswith(("http", "https"))匹配多个前缀);支持范围限制
结尾判断 str.endswith(suffix, start, end) s.endswith(".txt") 判断字符串是否以指定后缀结尾 O(k) 🔵 suffix可是元组(如endswith((".txt", ".csv"))匹配多个后缀);支持范围限制
字符类型判断 str.isalpha() s.isalpha() 判断所有字符是否为字母(a-z/A-Z) O(n) 🔵 空字符串返回False;仅当所有字符满足条件时返回True
字符类型判断 str.isdigit() s.isdigit() 判断所有字符是否为数字(0-9) O(n) 不包含小数点、正负号;全角数字(如"123")也会返回True
字符类型判断 str.isalnum() s.isalnum() 判断所有字符是否为字母或数字 O(n) 不包含标点、空格等非字母数字字符
字符类型判断 str.isspace() s.isspace() 判断所有字符是否为空白字符(空格/换行/制表符等) O(n) 空字符串返回False;仅空白字符组成的字符串返回True
字符类型判断 str.istitle() s.istitle() 判断是否为标题格式(每个单词首字母大写) O(n) 单词以非字母分隔,后续字母需小写才返回True
字符类型判断 str.isupper() / islower() s.isupper() 判断所有字母是否为全大写/全小写 O(n) 非字母字符不影响判断(如"123ABC"→True,"123Abc"→False)

(五)进阶操作

操作类型 具体操作 语法示例 功能描述 时间复杂度 注意事项
分割字符串 str.split(sep, maxsplit) s.split(",", 2) 按分隔符sep分割字符串,返回列表 O(n) 🔵 sep默认None(分割所有空白字符,忽略首尾空白);maxsplit指定最大分割次数(默认-1无限制);splitlines()按换行符分割(支持\n/\r/\r\n)
partition分割 str.partition(sep) s.partition("=") 按sep分割为(前缀, sep, 后缀)三元组 O(n) 🔵 仅分割一次(找到第一个sep);未找到sep时,后缀为空串;rpartition()从右分割
字符串对齐 str.expandtabs(tabsize) s.expandtabs(4) 将制表符(\t)替换为指定个数的空格 O(n) tabsize默认8;替换后字符串长度按制表位对齐
翻译字符 str.translate(table) s.translate(str.maketrans({"a":"x", "b":"y"})) 按映射表批量替换字符,返回新串 O(n) 🔵 需先用str.maketrans()创建映射表(支持字典/双字符串/三字符串格式);适合多字符批量替换
遍历字符 for循环遍历 for c in s: print(c) 逐个遍历字符串中的字符 O(n) 🔵 直接迭代字符串即可,无需转换为列表
枚举遍历 enumerate() for i, c in enumerate(s, start=1) 遍历字符及其索引位置 O(n) start参数控制索引起始值(默认0)
长度获取 len(s) len(s) 获取字符串的字符个数(Unicode字符计数) O(1) 🔵 内置函数,直接读取字符串长度属性,效率极高;空字符串返回0
浅拷贝 s.copy() 无(字符串不可变,无需拷贝) 字符串不可变,赋值操作即引用共享,无需拷贝 - 🔵 不可变类型天然避免修改冲突,赋值s2 = s仅共享引用,不占用额外内存
空串判断 if not s: if not s: print("空串") 判断字符串是否为空(长度为0) O(1) 🔵 等价于len(s) == 0,更简洁高效
去重 ''.join(dict.fromkeys(s)) ''.join(dict.fromkeys(s)) 保留字符首次出现顺序,去除重复字符 O(n) 🔵 利用字典3.7+有序性特性;去重后保持原字符顺序(与set去重的无序性区别)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

05.创建型 - 简单工厂模式(Simple Factory Pattern)

简单工厂模式(Simple Factory Pattern) 定义一个工厂类,根据传入的参数不同返回不同的实例,被创建的实例具有共同的父类或接口。 适用场景:(1)需要创建的对象较少。(2)客户端不关心对象的创建过程。例: 你需要一辆…

RabbitMQ延迟队列rabbitmq_delayed_message_exchange

访问:https://www.rabbitmq.com/community-plugins.html 下载rabbitmq_delayed_message_exchange插件,然后将插件文件(rabbitmq_delayed_message_exchange-4.0.2.ez)放置到RabbitMQ的插件目录(/usr/lib/rabbitmq/…

HaluMem:揭示当前AI记忆系统的系统性缺陷,系统失效率超50%

用过聊天机器人的人都遇到过这种情况:你刚说喜欢科幻小说,几轮对话后它给你推荐言情小说。你告诉聊天机器人升职了,但是过会儿又他又问你职业。这种情况不只是健忘而是根本性的bug——AI不仅会丢上下文,还会凭空编…

团队作业2-需求规格说明书

| 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience | | 这个作业要求在哪里| https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience/homework/13481 | | 这…

Mac安装Visual Studio 2019.dmg详细步骤(附图解,小白也能懂,附安装包)

Mac安装Visual Studio 2019.dmg详细步骤(附图解,小白也能懂,附安装包)​ Visual Studio 2019 for Mac是微软推出的 Mac 版集成开发环境(IDE),主要用于开发 C#、.NET、ASP.NET、Xamarin(移动开发)、Unity 游戏…

#题解#洛谷P1496#离散化#

[传送门](P1496 火烧赤壁 - 洛谷) 分析a,b的范围在 - 2 ^ 31 到 2 ^ 31 ,直接开数组用桶来记录每一个点是否染色显然MLE / RE尝试开数组用桶记录一个个区间段是否染色,如何选择区间段的端点呢?显然,只需选取每次染…

20251112 正睿

B对于一个子串,它一定会是两条出边,当且仅当其所有字符相同时达到的节点相同(不妨设这样的字符串为”特殊串“)。 如果不考虑特殊串,答案就是 \(2^n - 1\)。 而只要到达了特殊串,后面就只有 \(|s|\) 种路径了,所…

Polygon:从入门到入门

大概是一份面向新手的 Polygon 算法竞赛出题平台教程。 写在前面 Polygon 是一个自动化程度相当高的算法竞赛出题平台。在开始之前,先简单聊一聊 Polygon 能帮我们干一些什么事情。在 Polygon 上,你可以很方便的进行…

《云操作系统(OpenStack)第二版》学习笔记汇总版-从0开始完成在线安装并为离线安装准备软件包

对着这本书做,发现其中有很多问题,根本做不出来。中间上网查找了不少解决的办法,过程已经不记得了,现在把结果的代码放在这里。 脚本是我写的,一些关键的注释是我写的,不过后来又让豆包重新注释了一遍。 环境规划…

25.11.12 差分约束算法

差分约束算法 一.形式 由一组形如x_i​−x_j≤c​的不等式组成的系统,其中x_i,x_j,是变量,c是常量。 目标是:判断是否有一组 x 值同时满足所有约束;若有,求出一组可行解。 二.思路:转化成最短路问题 1.将x_i​−…

11/12

明天篮球比赛好期待

Linux C/C++ 学习日记(27):KCP协议(三):源码分析与使用示例 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

解决Cursor编辑器无法通过include path识别C++头文件的问题

前两天刚刚安装了cursor。在将一个在vscode中写的项目用cursor打开的时候,我发现项目中包含的一个第三方库TableSession.h无法被cursor识别。 我已经在vscode中配置了C/C++ > Default: Include Path项,包含了这个…

麒麟桌面系统2503安装openjdk21

麒麟桌面系统2503安装openjdk211、更新软件包列表 sudo apt update 2、搜索可用的 OpenJDK 版本 apt search openjdk 可以看到通常会列出多个版本(如 OpenJDK 11、17 等),OpenJDK 21 已经进入默认软件源 3、需要的版…

重组蛋白基础与技术概述

重组蛋白是指通过基因工程技术,在宿主细胞中表达和纯化的特定蛋白质分子。这一技术使得科学家能够大规模获得高纯度的目标蛋白,为生命科学研究提供了重要的工具试剂。重组蛋白技术的核心在于将目标蛋白的编码基因导入…

Day36(6)-F:\硕士阶段\Java\课程代码\后端\web-ai-code\web-ai-project01

Maven第32集讲安装Maven文件导入方式 先把对应文件夹拖到资源管理器 然后再让idea识别出这个是maven,记得通过pom.xml打开依赖配置 Maven Repository: Search/Browse/Explore排除依赖命令行传参调用mvn时,要先配置MA…

E. Journey

E. Journey Problem - E - Codeforces \(kruskal\)重构树, 欧拉路径 首先不考虑操作二,那么题目就是问走过所有边回到 \(1\) 的最短路径,如果均仅走过一次,那么整个路径构成欧拉回路,答案为 \(\sum_i w_i\) ,否则…

Dynamics 365 Field Service跨站脚本欺骗漏洞分析

本文详细分析了CVE-2025-62210漏洞,这是一个影响Dynamics 365 Field Service在线版的跨站脚本安全漏洞,允许授权攻击者通过网络进行欺骗攻击,CVSS评分为8.7分的高危漏洞。概述 CVE-2025-62210是Dynamics 365 Field …

Linux优秀的系统--信号(3--信号的保存、阻塞)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …