Python 字符串
字符串是 Python 里最重要的数据类型之一——文本处理、网页、API、配置文件、日志,几乎所有数据最终都是字符串。这一章把字符串从创建到操作讲透,重点掌握切片、方法和 f-string。
1. 创建字符串:4 种引号
# Python 字符串可以用 4 种引号
s1 = 'hello' # 单引号
s2 = "hello" # 双引号(完全等价)
s3 = '''多行字符串''' # 三引号:可跨多行
s4 = """也是多行""" # 三双引号
# 单双引号的好处:字符串里有引号时换一种用就行
print("I'm a student") # 字符串里有单引号,外面用双引号
print('他说"你好"') # 字符串里有双引号,外面用单引号
# 多行字符串:保留换行和缩进
poem = """床前明月光,
疑是地上霜。
举头望明月,
低头思故乡。"""
print(poem)Python 字符串的单引号和双引号完全等价(不像某些语言分字符和字符串)。选用哪种纯粹看内容——字符串里有单引号就用双引号包,反之亦然,省得转义。
2. 转义字符与原始字符串
# 转义字符:用反斜杠 \ 表示特殊字符
print("换行\n第二行") # 换行
print("制表符\t对齐") # 制表符
print("引号:\"你好\"") # 字符串里输出引号
print("反斜杠本身:\\") # 输出一个反斜杠
# 原始字符串:r 开头,反斜杠不转义,常用于正则表达式
path = "C:\\Users\\name\\file.txt" # 普通写法,要写两个反斜杠
path_r = r"C:\Users\name\file.txt" # 原始字符串,写一个就行
print(path_r) # C:\Users\name\file.txt常用转义:\\n 换行、\\t 制表符、\\ 反斜杠本身、\\" 双引号。原始字符串 r"..." 在写正则、Windows 路径时极其方便。
3. 索引与切片(核心)
字符串本质是"字符序列",可以用下标访问,也支持切片——这是 Python 序列类型的通用特性。
s = "Hello, Python!"
# 索引:从 0 开始,负数从末尾数
print(s[0]) # H 第一个字符
print(s[7]) # P
print(s[-1]) # ! 最后一个字符
print(s[-2]) # n 倒数第二个
# len() 取长度
print(len(s)) # 14
# 字符串不可变,不能修改单个字符
# s[0] = "h" # ❌ TypeError: 'str' object does not support item assignment
# 切片 [起:止:步长],起止都能省略
print(s[0:5]) # Hello 索引 0~4
print(s[7:13]) # Python
print(s[:5]) # Hello 省略起点,从头开始
print(s[7:]) # Python! 省略终点,到末尾
print(s[:]) # Hello, Python! 全部(常用于复制)
# 步长 step(默认 1)
print(s[::2]) # Hlo yhn 每隔一个取一个
print(s[::-1]) # !nohtyP ,olleH 反转字符串!几个要点:
- 索引从 0 开始,负数从末尾倒数(
-1是最后一个)。 - 字符串不可变:不能
s[0] = "h",要"修改"只能切片拼接出新字符串。 - 切片
[起:止:步长]:起止可省略,[::-1]反转字符串是经典技巧。 - 切片"止"是开区间(不包含该位置)。
4. 拼接与重复
# 拼接:+ 和 *
a = "Hello"
b = "World"
print(a + " " + b) # Hello World
print(a * 3) # HelloHelloHello 重复
# join:把列表拼成一个字符串(比 + 更高效)
words = ["Python", "is", "awesome"]
sentence = " ".join(words)
print(sentence) # Python is awesome
# 用任意分隔符
print("-".join(["2024", "01", "15"])) # 2024-01-15
print("、".join(["苹果", "香蕉", "橘子"])) # 苹果、香蕉、橘子
# in 判断包含
print("Python" in "I love Python") # True
print("java" not in "I love Python") # Truejoin 比加号 + 高效得多:大量拼接时,+ 每次都创建新字符串(O(n²));join 一次性计算好长度(O(n))。所以拼接列表里的字符串,永远优先用 join。
5. 字符串格式化(重点:f-string)
把变量插入字符串有三种方式,记住 f-string 是现代 Python 的首选:
name = "小明"
age = 20
height = 1.75
# 1. 老式写法:% 格式化(不推荐,但老代码常见)
print("我叫%s,今年%d岁" % (name, age))
# 2. str.format()(Python 2.6+)
print("我叫{},今年{}岁".format(name, age))
print("我叫{0},你叫{1},{0}很高兴认识你".format("小明", "小红"))
# 3. f-string(Python 3.6+,最推荐!)
print(f"我叫{name},今年{age}岁,身高{height}米")
# 输出: 我叫小明,今年20岁,身高1.75米
# f-string 里可以直接放表达式
print(f"明年我 {age + 1} 岁")
print(f"2 的 10 次方 = {2 ** 10}")
# f-string 格式化数字(超实用)
pi = 3.14159265
print(f"圆周率:{pi:.2f}") # 3.14 保留 2 位小数
print(f"百分比:{0.85:.1%}") # 85.0% 百分比格式
print(f"序号:{42:05d}") # 00042 补零到 5 位
print(f"金额:{9999:,}") # 9,999 千分位分隔f-string 在字符串前加 f,用 {} 包裹变量或表达式。它的格式化语法很强大,常用:
{pi:.2f}—— 保留 2 位小数{n:05d}—— 补零到 5 位{n:,}—— 千分位分隔符{n:.1%}—— 百分比格式{n:>10}/{n:<10}/{n:^10}—— 右对齐 / 左对齐 / 居中,宽度 10
6. 常用字符串方法
字符串自带一大批方法(方法就是"对字符串做的事"),记住下面这几个最常用的:
s = " Hello, World! "
# 1. 大小写转换
print(s.upper()) # " HELLO, WORLD! "
print(s.lower()) # " hello, world! "
print(s.title()) # " Hello, World! " 每个单词首字母大写
print(s.capitalize()) # " hello, world! " 整句首字母大写
print(s.swapcase()) # 大小写互换
# 2. 去空白(超常用)
print(s.strip()) # "Hello, World!" 去首尾空白
print(s.lstrip()) # 去左边的空白
print(s.rstrip()) # 去右边的空白
# 3. 查找与替换
print("World" in s) # True
print(s.find("World")) # 10 返回下标,找不到返回 -1
print(s.count("l")) # 3 "l" 出现的次数
print(s.replace("World", "Python")) # 替换
# 4. 拆分与拼接
csv = "苹果,香蕉,橘子"
print(csv.split(",")) # ['苹果', '香蕉', '橘子']
print("一 二 三".split()) # ['一', '二', '三'] 不传参数按空白拆分
print(" ".join(["a", "b", "c"])) # "a b c"
# 5. 判断类(返回布尔)
print("123".isdigit()) # True 是否全是数字
print("abc".isalpha()) # True 是否全是字母
print("hello123".isalnum())# True 是否字母或数字
print("Hello".isupper()) # False
print(" ".isspace()) # True 是否全是空白注意:字符串方法都是返回新字符串,不改原字符串(因为字符串不可变)。新手常犯的错:
name = " 小明 "
name.strip() # 返回新字符串,但没接收!
print(name) # " 小明 " 原字符串没变
clean = name.strip() # ✅ 必须接收返回值
print(clean) # "小明"7. Unicode 与编码
Python 3 字符串默认是 Unicode,处理中文、emoji、各国文字都无需特殊处理。但在网络传输和文件读写时,需要把字符串编码成字节(bytes)。
# Python 3 字符串默认就是 Unicode,全球文字都能直接用
chinese = "你好世界"
emoji = "我爱 Python 🐍"
print(chinese) # 你好世界
print(emoji) # 我爱 Python 🐍
print(len("你好")) # 2 中文也是 2 个字符
# 字符串 ↔ 字节(bytes)的转换(网络传输、文件读写要用)
s = "你好"
b = s.encode("utf-8") # 编码成字节
print(b) # b'\xe4\xbd\xa0\xe5\xa5\xbd'
print(len(b)) # 6 UTF-8 中文一个字占 3 字节
# 解码
print(b.decode("utf-8")) # 你好记住这个原则:字符串(给人看)和字节(给机器存/传)是两个东西,用 encode() 和 decode() 互转。涉及乱码问题,99% 是编码不一致(比如 Windows 默认 GBK,Linux 默认 UTF-8)。
小结
字符串是 Python 的核心类型。重点掌握:4 种引号、索引与切片([::-1] 反转)、f-string 格式化(现代首选)、10+ 常用方法(strip/split/join/replace/find/upper/lower)、字符串不可变(方法返回新字符串)。下一篇看列表——Python 最常用的数据结构。
← 上一篇 Python 运算符
下一篇 Python 列表 →