常用数据结构之字符串
基础教学 1 min read

常用数据结构之字符串

Blog Author

常用数据结构之字符串:理解文本处理的核心利器

为什么要学习字符串:从数字时代走向信息社会

虽然现代计算机最初的任务是数值计算(如 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
不可变性 字符串无法原地修改
常用方法 stripfindreplacesplitjoin
格式化 f-string 是最现代、简洁的方式
编码解码 字符串与字节之间的转换

延伸思考与建议实践

  1. 写一个程序,判断用户输入的字符串是否为合法邮箱。
  2. 编写一个“注册表单检查”工具,对用户名、密码进行isalpha()isdigit()等校验。
  3. 使用splitjoin来处理 CSV 格式文本,提取和组合字段。
  4. 掌握 f-string 的所有格式控制符,做一张常用格式备忘录。

若你已经掌握这些基础内容,可以继续学习:

  • 正则表达式(re 模块)
  • 字符串搜索与替换的高级技巧
  • 多语言文本处理与 Unicode 编码陷阱

如需进入下一课,请发送:“数据结构之元组” 或 “字符串实战项目”。