常用数据结构之字符串
常用数据结构之字符串:理解文本处理的核心利器
为什么要学习字符串:从数字时代走向信息社会
虽然现代计算机最初的任务是数值计算(如 ENIAC 为导弹计算弹道),但随着技术发展,计算机的核心任务已逐步演变为信息处理,而文本正是信息表达的主要方式。从搜索引擎的关键词匹配,到社交媒体的消息显示,再到自然语言处理中的文本分析,字符串(String)已成为编程世界中最基础也是最重要的数据结构之一。
什么是字符串(String)
✅ 定义与本质
字符串是由 零个或多个字符组成的有序序列。
数学上可以表示为:
$$ s = a_1a_2 \cdots a_n \quad (0 \leq n \leq \infty) $$
- 每个字符可以是英文字母、中文、符号、甚至 Emoji。
- 本质上,字符串是 字符的容器,是一种 不可变的数据结构(immutable)。
✅ 创建字符串的三种方式
s1 = 'hello'
s2 = "world"
s3 = '''hello
multi-line'''
- 单引号、双引号等价,三引号支持跨行。
- 字符串也可以为空:
''
或""
字符串中的特殊字符与原始字符串
🎯 转义字符(Escape Sequences)
用于插入无法直接键入的控制字符:
表达 | 含义 |
---|---|
\n |
换行 |
\t |
制表符(tab) |
\\ |
反斜杠 |
\' |
单引号 |
s = 'I\'m a coder.\nAre you?'
print(s)
🎯 原始字符串:r''
/ R''
告诉 Python 不要处理转义字符:
path = r'C:\Users\Name\Desktop'
非常适合正则表达式、文件路径等。
字符串的基本运算:与列表一致的“文本容器思维”
运算符 | 含义 | 示例 |
---|---|---|
+ |
拼接 | 'hello' + 'world' |
* |
重复 | 'ha' * 3 → 'hahaha' |
in / not in |
成员判断 | 'a' in 'apple' → True |
[] / [:] |
索引 / 切片 | 'hello'[1:3] → 'el' |
✅ 使用场景举例
- 拼接用于构造完整句子或 URL。
- 重复用于生成测试数据或动画效果。
- 切片用于提取邮箱名、文件扩展名等。
字符串不可变:你修改的其实是新字符串
s = 'hello'
s = s.upper()
print(s) # 'HELLO'
- 原字符串并未改变,而是返回了一个新字符串。
- 所以所有字符串方法的结果都要重新赋值保存。
字符串的遍历方式(两种)
方法一:按索引访问
for i in range(len(s)):
print(s[i])
方法二:直接遍历字符
for ch in s:
print(ch)
推荐使用方式二,代码更优雅。
字符串的常用方法:你的文本“工具箱”
🧱 大小写处理(文本标准化)
s = 'hello world'
s.capitalize() → 'Hello world'
s.upper() → 'HELLO WORLD'
s.title() → 'Hello World'
🔍 查找与判断
s.find('or') # 返回首次出现索引或 -1
s.startswith('he') # 是否以...开头
s.endswith('ld') # 是否以...结尾
find()
与index()
的区别:找不到时find
返回 -1,index
报错。
🎭 字符类型判断
s.isdigit() # 是否全为数字
s.isalpha() # 是否全为字母(含中文)
s.isalnum() # 是否为字母+数字组成
✂️ 去除多余字符(常用于清洗用户输入)
s.strip() # 去除首尾空白或指定字符
s.lstrip('~') # 去左侧 ~
s.rstrip('~') # 去右侧 ~
🔁 替换内容
s.replace('old', 'new') # 替换所有 old
s.replace('a', '@', 2) # 最多替换 2 次
🧨 拆分与合并(split / join)
'hello world'.split() → ['hello', 'world']
'_'.join(['a', 'b']) → 'a_b'
🧮 长度获取
len('hello') # 5
字符串格式化:更安全更优雅的字符串构造
✅ 三种方式
name = 'Alice'
score = 95
print('%s scored %d' % (name, score)) # 方式1:C风格
print('{} scored {}'.format(name, score)) # 方式2:format 方法
print(f'{name} scored {score}') # ✅ 推荐方式3:f-string(Python 3.6+)
🎯 f-string 强大的格式控制
pi = 3.1415926
print(f'{pi:.2f}') # 3.14
print(f'{1000:,}') # 1,000
print(f'{0.85:.0%}') # 85%
print(f'{42:0>5}') # 00042(左侧补0,宽度5)
字符串与编码:从字符到字节
字符串与字节串的转换
s = '骆昊'
b = s.encode('utf-8') # 转为 bytes 类型
print(b) # b'\xe9\xaa\x86\xe6\x98\x8a'
print(b.decode('utf-8')) # 解码回字符串
- 重要:编码和解码方式要一致!
- 应用:网络通信、文件保存等底层操作时常用。
实战场景:字符串的典型使用案例
场景 | 应用 |
---|---|
数据清洗 | 去除空格、统一大小写、分割字段 |
表单验证 | 检查是否只包含数字、邮箱格式、用户名合法性 |
日志分析 | 提取日期、IP 地址、关键错误信息 |
Web 开发 | 构造 URL、生成 HTML 模板、处理请求参数 |
数据展示 | 格式化输出、对齐文字、补零补空格 |
总结回顾
内容模块 | 关键掌握点 |
---|---|
创建方式 | 单引号、双引号、三引号、空字符串 |
运算操作 | 拼接、重复、切片、in |
不可变性 | 字符串无法原地修改 |
常用方法 | strip 、find 、replace 、split 、join 等 |
格式化 | f-string 是最现代、简洁的方式 |
编码解码 | 字符串与字节之间的转换 |
延伸思考与建议实践
- 写一个程序,判断用户输入的字符串是否为合法邮箱。
- 编写一个“注册表单检查”工具,对用户名、密码进行
isalpha()
、isdigit()
等校验。 - 使用
split
和join
来处理 CSV 格式文本,提取和组合字段。 - 掌握
f-string
的所有格式控制符,做一张常用格式备忘录。
若你已经掌握这些基础内容,可以继续学习:
- 正则表达式(re 模块)
- 字符串搜索与替换的高级技巧
- 多语言文本处理与 Unicode 编码陷阱
如需进入下一课,请发送:“数据结构之元组” 或 “字符串实战项目”。