字符串是 Python 中最常用的数据类型之一,掌握字符串操作是 Python 编程的基础。本文将通过清晰的章节结构和丰富的代码示例,系统梳理 Python 字符串的定义、转义、格式化、索引、切片、遍历以及常用方法,帮助读者构建完整的知识体系。
1. 定义字符串的三种方式
Python 中定义字符串非常灵活,支持单引号、双引号和三引号三种方式,不同方式适用于不同场景。
1.1 单引号与双引号
单引号和双引号在功能上完全等价,可以交替使用来避免转义。当字符串内部包含单引号时,外层用双引号包裹;反之亦然。
# 单引号定义 s1 = 'Hello Python' 双引号定义 s2 = "Hello Python" 交替使用,避免转义 s3 = "It's a good day" # 内部有单引号,外层用双引号 s4 = '他说:"你好"' # 内部有双引号,外层用单引号1.2 三引号
三引号(三个单引号或三个双引号)用于定义多行字符串,可以保留内部的换行和缩进格式。此外,三引号还常用于编写文档字符串(docstring),对模块、类和函数进行说明。
# 多行字符串,保留格式 poem = '''静夜思 床前明月光, 疑是地上霜。 举头望明月, 低头思故乡。''' 文档字符串:为函数添加说明 def greet(name): """向指定用户打招呼""" return f"你好,{name}!" 文档字符串:为类添加说明 class Student: """学生类,用于管理学生信息""" pass2. 转义字符
转义字符用于在字符串中表示无法直接输入的特殊字符。Python 使用反斜杠\作为转义前缀。
| 转义字符 | 含义 | 示例 |
|---|---|---|
\n | 换行 | print("第一行\n第二行") |
\t | 制表符(Tab) | print("姓名\t年龄") |
\' | 单引号作为普通字符 | 'It\'s nice' |
\" | 双引号作为普通字符 | "他说\"你好\"" |
\\ | 反斜杠本身 | "C:\\Users\\Admin" |
对于包含大量反斜杠的字符串(如 Windows 文件路径、正则表达式),可以使用原始字符串,在引号前加r前缀,让反斜杠保持原义:
# 普通字符串:需要双重转义 path1 = "C:\\Users\\Admin\\Documents" 原始字符串:反斜杠保持原义,推荐用于路径 path2 = r"C:\Users\Admin\Documents" 正则表达式也常用原始字符串 import re pattern = r"\d{3}-\d{4}" # 匹配 3位数字-4位数字3. 格式化字符串
Python 提供了三种主流的字符串格式化方式,从旧到新依次演进,推荐优先使用 f-string。
3.1 f-string(推荐)
Python 3.6 引入,在字符串前加f前缀,用花括号直接嵌入变量或表达式,简洁直观、性能最优。
name = "张三" age = 25 score = 92.5 嵌入变量 s = f"我叫{name},今年{age}岁" 嵌入表达式 s = f"明年我就{age + 1}岁了" 控制格式 s = f"成绩:{score:.1f}分" # 保留1位小数 → 成绩:92.5分3.2 % 格式化(传统方式)
沿用 C 语言的printf风格,使用%占位符。
name = "李四" age = 30 %s 表示字符串,%d 表示整数 s = "我叫%s,今年%d岁" % (name, age) 单个变量可省略括号 s = "欢迎你,%s!" % name3.3 format() 方法
使用花括号{}作为占位符,通过format()方法填充,比%方式更灵活。
name = "王五" age = 28 按位置填充 s = "我叫{},今年{}岁".format(name, age) 按索引填充 s = "我叫{0},今年{1}岁,{0}来自北京".format(name, age) 按关键字填充 s = "我叫{n},今年{a}岁".format(n=name, a=age)4. 索引:访问字符串中的字符
字符串本质上是字符序列,可以通过索引(下标)访问其中的每个字符。Python 支持正向索引和反向索引。
s = "Hello Python" length = len(s) # 获取字符串长度,结果为 12 正向索引:从 0 开始,范围 [0, len(s)-1] print(s[0]) # 'H' print(s[6]) # 'P' 反向索引:从 -1 开始,范围 [-len(s), -1] print(s[-1]) # 'n' print(s[-12]) # 'H'(等价于 s[0])索引越界会抛出IndexError,使用时务必确保索引在合法范围内。
5. 切片:提取子字符串
切片是 Python 字符串操作中最强大的功能之一,用于从字符串中提取指定范围的子串。基本语法为:
s[start:stop:step]- start:起始索引(包含),默认为 0
- stop:结束索引(不包含),默认为字符串末尾
- step:步长,默认为 1
s = "Hello Python" 基本切片 print(s[0:5]) # 'Hello'(索引0到4,不含5) print(s[6:12]) # 'Python' 省略写法 print(s[6:]) # 'Python'(从索引6到末尾) print(s[:5]) # 'Hello'(从开头到索引4) print(s[:]) # 'Hello Python'(完整复制) 使用步长 print(s[::2]) # 'HloPto'(每隔一个字符取一个) 倒序切片 print(s[::-1]) # 'nohtyP olleH'(整体反转) print(s[3:1:-1]) # 'll'(从索引3到索引2,反向步进)6. 遍历字符串
Python 提供了两种常见的字符串遍历方式,适用于不同的场景。
6.1 直接遍历字符
使用for e in s遍历字符串中的每个字符,语法简洁,适合大多数场景。
s = "Python" for ch in s: print(ch, end=" ") # 输出:P y t h o n6.2 通过索引遍历
使用for i in range(len(s))遍历索引,在需要同时操作索引和字符时更加方便。
s = "Python" for i in range(len(s)): print(f"索引{i}的字符是:{s[i]}") 输出: 索引0的字符是:P 索引1的字符是:y ...6.3 同时获取索引和字符
推荐使用enumerate(),一行代码同时拿到索引和对应字符:
s = "Python" for i, ch in enumerate(s): print(f"索引{i} → {ch}")7. 常用操作方法
Python 字符串提供了丰富的内置方法,下面按照功能分类逐一介绍。
7.1 查找与判断
s = "Hello Python,Welcome to Python World" find() —— 返回第一个匹配索引,找不到返回 -1 print(s.find("Python")) # 6 print(s.find("Java")) # -1 index() —— 返回第一个匹配索引,找不到抛出 ValueError print(s.index("Python")) # 6 print(s.index("Java")) # 报错:ValueError count() —— 统计子串出现次数 print(s.count("Python")) # 2 print(s.count("o")) # 5 startswith() —— 判断是否以指定前缀开头 print(s.startswith("Hello")) # True endswith() —— 判断是否以指定后缀结尾 print(s.endswith("World")) # True7.2 大小写转换
s = "hello python world" print(s.upper()) # 'HELLO PYTHON WORLD' 全大写 print(s.lower()) # 'hello python world' 全小写 print(s.title()) # 'Hello Python World' 每个单词首字母大写 print(s.capitalize()) # 'Hello python world' 整句首字母大写 print(s.swapcase()) # 'HELLO PYTHON WORLD' 大小写翻转(此时全小写→全大写)7.3 对齐与填充
s = "Python" center(width, fillchar) —— 居中,可指定填充字符(默认空格) print(s.center(12, "*")) # 'Python' ljust(width, fillchar) —— 左对齐 print(s.ljust(12, "-")) # 'Python------' rjust(width, fillchar) —— 右对齐 print(s.rjust(12, "-")) # '------Python' zfill(width) —— 右对齐,左侧填充 0 print(s.zfill(10)) # '0000Python'7.4 修剪与替换
s = " Hello Python " strip() —— 剔除两端空白(可指定字符,默认空格) print(s.strip()) # 'Hello Python' lstrip() —— 剔除左侧空白;removeprefix() 删除指定前缀(Python 3.9+) print(s.lstrip()) # 'Hello Python ' print("prefix_data".removeprefix("prefix_")) # 'data' rstrip() —— 剔除右侧空白;removesuffix() 删除指定后缀(Python 3.9+) print(s.rstrip()) # ' Hello Python' print("file.txt".removesuffix(".txt")) # 'file' replace(old, new) —— 替换子串 text = "I like Java,Java is good" print(text.replace("Java", "Python")) # 'I like Python,Python is good'7.5 拼接与分割
# join() —— 将可迭代对象用指定字符串拼接 words = ["Python", "Java", "Go"] result = "、".join(words) print(result) # 'Python、Java、Go' split() —— 按指定字符切割,返回列表 s = "apple,banana,orange" fruits = s.split(",") print(fruits) # ['apple', 'banana', 'orange']7.6 编码与解码
字符串与字节流之间的转换在网络传输和文件读写中非常常见。
# encode() —— 将字符串编码为字节流 text = "hello world" byte_data = text.encode("utf8") print(byte_data) # b'hello world' print(type(byte_data)) # <class 'bytes'> decode() —— 将字节流解码为字符串 decoded_text = byte_data.decode("utf8") print(decoded_text) # 'hello world' print(type(decoded_text)) # <class 'str'>7.7 字符类型判断(is 系列)
以下方法返回布尔值,用于判断字符串的字符类型:
print("abc".isalpha()) # True 是否全为字母 print("123".isdigit()) # True 是否全为数字 print("abc123".isalnum()) # True 是否全为字母或数字 print("hello".islower()) # True 是否全为小写 print("HELLO".isupper()) # True 是否全为大写 print("Hello World".istitle()) # True 是否每个单词首字母大写总结
本文从定义、转义、格式化、索引、切片、遍历、常用方法七个维度系统梳理了 Python 字符串的核心操作。其中切片语法和丰富的内置方法是 Python 字符串处理的亮点,熟练掌握后可以大幅提升编码效率。建议读者将本文中的代码示例亲自运行一遍,加深理解和记忆。