news 2026/6/1 15:24:03

Python字符串易踩的10个“坑”

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python字符串易踩的10个“坑”

大家好,欢迎来到 Crossin 的编程教室。

字符串是Python中最常用的数据类型之一,看起来简单,用着顺手,但里面也藏着一些“坑”,很多新手(甚至有些老手)都会在这里不小心踩中。

今天我们就来盘点一下Python字符串的10个经典易错点,帮助你避开这些常见错误。相信看完这篇文章,你对字符串的理解又能更进一步。

1. 字符串是不可变的

Python的字符串是不可变(immutable)的,这意味着一旦创建,就不能修改其中的字符。

很多人写出这样的代码,以为自己改了字符串:

s = "hello"s[0] = "H" # 试图修改第一个字符

结果直接报错:'str' object does not support item assignment

还有人用replace,以为它能原地替换:

s = "hello"s.replace("h", "H")print(s) # 还是 "hello"

但其实 replace 是返回一个新字符串,原字符串没变。正确写法:

s = s.replace("h", "H")print(s) # "Hello"

记住:任何“修改”字符串的操作,都会返回新字符串,原字符串不变。

2. is 和 == 在字符串里的区别

== 判断值是否相等,is 判断是否是同一个对象。

对于小字符串,Python会做字符串驻留(interning),所以有时is也返回True:

a = "hello"b = "hello"print(a == b) # Trueprint(a is b) # 通常True(因为驻留)

但不要依赖 is,尤其是长字符串或动态生成的:

a = "hello world!"b = "hello " + "world!"print(a is b) # 可能False

所以,永远用 == 比较值相等。

3. 空字符串、None、False 的混淆

空字符串 ""、None、False 在布尔上下文中都为 False:

if "": print("不会执行")if None: print("也不会执行")if False: print("还是不执行")

但它们是完全不同的东西:

  • "":有值,字符串类型,只是内容为空

  • None:没有值 / 未赋值

  • False:有值,bool类型

检查字符串是否为空串用 if s == "",不要和 None 混用。

4. strip() 不是“删除字符”

有人以为:

s.strip("abc")

是删除字符串里的 "abc" 子串。

但其实它的含义是:

删除字符串两端所有属于字符集合 {a, b, c} 的字符。

print("abc123abc456bca".strip("abc"))# 结果是 "123abc456"

不是替换,不是删除子串,而是从两端往中间“剥字符”,直到不属于集合的字符为止。

5. split() 的默认行为

不传参数的split()很聪明:

s = "a b c d"print(s.split()) # ['a', 'b', 'c', 'd'] 自动把连续空白当一个分隔符print(s.split(" ")) # ['a', '', 'b', '', '', 'c', '', 'd']

它会自动丢弃首尾空白,并忽略空字段。

6. 字符串比较的“反直觉”顺序

字符串比较是按Unicode码点逐字符比较的:

print("10" < "2") # True 因为'1'的码点 < '2'print("Apple" < "apple") # True 因为大写A < 小写a

因此排序或比较版本号、数字字符串时可能会跟你想象的结果不一样。需要排序数字时,先转 int 或用 key 参数。

7. 字符长度 ≠ 显示长度

len() 计算的是字符数(Unicode码点数),不是视觉宽度:

s = "你好🏃🏻‍♀️" # emoji组合字符print(len(s)) # 7

8. 循环中用 + 拼接字符串的性能陷阱

在循环里这样拼接:

s = ""for i in range(100000): s += "a" # 每次都创建新字符串

大数据量时会超级慢(O(n²))。

正确方式:

parts = []for i in range(100000): parts.append("a")s = "".join(parts)# 或直接 s = "".join("a" for i in range(10000))

大量字符串拼接时务必用 join。

9. “中文乱码”

中文乱码通常发生在编码/解码不匹配的时候:

text = "中文"bytes_data = text.encode("gbk") # 用gbk编码print(bytes_data.decode("gbk")) # 用gbk解码正确print(bytes_data.decode("utf-8", errors='replace')) # 用utf-8解码 → 乱码 ����

读文件、网络数据时,指定正确的编码,否则编码不匹配就会乱码。

10. 结尾不能是单个反斜杠

字符串末尾不能直接写单个 \,因为它会转义后面的引号,即使是前面加上 r 的原始字符串(raw string)也不行:

r"C:\new\test\" # 语法错误

如果你想表示 Windows 的路径,直接用 / 替代 \ 吧。

以上就是Python字符串的10个易错点。希望这些例子能帮你少走弯路。

你还踩过什么坑?可以在留言区说一说。

如果本文对你有帮助,欢迎点赞、评论、转发。你们的支持是我更新的动力~


Crossin的新书《码上行动:用ChatGPT学会Python编程》已经上市了。本书以ChatGPT为辅助,系统全面地讲解了如何掌握Python编程,适合Python零基础入门的读者学习。【点此查看详细介绍】

购买后可加入读者交流群,Crossin为你开启陪读模式,解答你在阅读本书时的一切疑问。

Crossin的其他书籍:


添加微信crossin123,加入编程教室共同学习~

感谢转发点赞的各位~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/31 6:18:26

MCP SC-400安全策略实施难点解析(仅限内部流传的技术要点)

第一章&#xff1a;MCP SC-400安全策略概述MCP SC-400 是 Microsoft 365 信息保护与合规性认证中的核心安全控制框架&#xff0c;专注于数据泄露防护&#xff08;DLP&#xff09;、敏感信息类型识别、以及合规性策略的实施。该策略体系为组织提供了一套系统化的安全配置方法&am…

作者头像 李华
网站建设 2026/5/31 1:43:11

你真的会用Azure Monitor吗?,AZ-500云Agent集成配置全揭秘

第一章&#xff1a;Azure Monitor与MCP AZ-5000云Agent集成概述Azure Monitor 是 Microsoft Azure 提供的核心监控服务&#xff0c;用于收集、分析和响应来自云与本地环境的遥测数据。通过与 MCP AZ-500 云 Agent 的深度集成&#xff0c;Azure Monitor 能够实现对虚拟机、容器及…

作者头像 李华
网站建设 2026/6/1 15:07:47

【顶级安全专家亲授】:MCP SC-400策略优化的8个黄金法则

第一章&#xff1a;MCP SC-400安全策略的核心架构MCP SC-400 安全策略是一套面向现代云原生环境的综合性安全框架&#xff0c;旨在通过分层防御机制保护数据完整性、系统可用性与访问可控性。其核心架构围绕身份验证、数据加密、访问控制和审计追踪四大支柱构建&#xff0c;确保…

作者头像 李华
网站建设 2026/6/1 7:13:20

尚水智能IPO过会:前9个月营收5.7亿 扣非后净利9361万

雷递网 雷建平 12月16日深圳市尚水智能股份有限公司&#xff08;简称&#xff1a;“尚水智能”&#xff09;日前IPO过会&#xff0c;准备在深交所创业板上市。尚水智能计划募资5.87亿&#xff0c;其中&#xff0c;2.28亿用于高精智能装备华南总部制造基地建设项目&#xff0c;2…

作者头像 李华
网站建设 2026/6/1 9:24:06

UE4SS终极指南:从安装到精通Unreal Engine游戏脚本开发

UE4SS终极指南&#xff1a;从安装到精通Unreal Engine游戏脚本开发 【免费下载链接】RE-UE4SS Injectable LUA scripting system, SDK generator, live property editor and other dumping utilities for UE4/5 games 项目地址: https://gitcode.com/gh_mirrors/re/RE-UE4SS …

作者头像 李华
网站建设 2026/6/1 3:44:09

校园外卖|基于springboot校园外卖系统(源码+数据库+文档)

校园外卖 目录 基于springboot vue校园外卖系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 基于springboot vue校园外卖系统 一、前言 博主介绍&#xff1a;✌️大…

作者头像 李华