PYTHON KNOWLEDGE · 05
字符串、转义、切片与格式化
从不可变字符序列到检索、拆分、拼接、格式化和常用判断方法。
GESP 1 级GESP 3 级GESP 4 级
01 · FORMAL DEFINITION
正式定义
str 是不可变的 Unicode 字符序列。下标访问单个字符,切片生成新字符串;任何看似“修改字符串”的方法都会返回新对象。
02 · MUST KNOW
学完这一章,必须说清楚的规则
- 01
下标从 0 开始,负下标从末尾开始;切片 s[start:stop:step] 不包含 stop,step 不能为 0。
- 02
转义序列用于在字面量中表示换行、制表、引号、反斜杠或码点;原始字符串仍有末尾反斜杠限制。
- 03
find 找不到返回 -1,index 找不到抛 ValueError;count 统计不重叠出现次数。
- 04
split 把字符串拆成列表,join 用一个字符串连接可迭代对象中的字符串,strip 只删除两端字符。
- 05
f-string 的格式说明可控制宽度、对齐、精度、进制和百分比;格式化不改变原值。
- 06
isalpha/isdigit 等按 Unicode 定义,不只识别英文字母和 ASCII 数字。
03 · RUNNABLE EXAMPLE
可运行示例与因果解释
text = ' Alice,90 '
name, score = text.strip().split(',')
print(f'{name:<8} | {int(score):03d}')
print('Python'[::-1])STRING LITERALS
字符串转义序列速查
表中写法用于普通字符串字面量。原始字符串 r'...' 会保留多数反斜杠,但不能以奇数个反斜杠结束。
| 写法 | 含义 |
|---|---|
\\ | 反斜杠 \ |
\' | 单引号 |
\" | 双引号 |
\n | 换行 LF |
\r | 回车 CR |
\t | 水平制表 |
\b | 退格 |
\f | 换页 |
\v | 垂直制表 |
\a | 响铃 |
\ooo | 八进制值 ooo 的字符(最多三位) |
\xhh | 十六进制值 hh 的字符(必须两位) |
\N{name} | 按 Unicode 正式名称指定字符 |
\uxxxx | 16 位十六进制 Unicode 码点 |
\Uxxxxxxxx | 32 位十六进制 Unicode 码点 |
反斜杠 + 换行 | 忽略物理换行,继续同一逻辑行 |
STR PUBLIC METHODS
字符串公开方法完整速查
以下覆盖 Python 3.12 str 的公开方法。所有方法都返回结果或判断值,不会原地改变字符串。
| 方法 | 核心作用 |
|---|---|
capitalize | 首字符大写,其余字符小写 |
casefold | 用于无大小写文本匹配的强力小写化 |
center | 按宽度居中并填充 |
count | 统计非重叠子串次数 |
encode | 按编码方案转为 bytes |
endswith | 判断是否以指定后缀结束 |
expandtabs | 把制表符展开为空格 |
find | 查找子串,找不到返回 -1 |
format | 按格式字段生成字符串 |
format_map | 使用映射提供格式字段 |
index | 查找子串,找不到抛 ValueError |
isalnum | 是否全为字母或数字且非空 |
isalpha | 是否全为字母且非空 |
isascii | 是否所有字符码点都小于 128 |
isdecimal | 是否全为十进制数字字符且非空 |
isdigit | 是否全为数字字符且非空,范围比 isdecimal 广 |
isidentifier | 是否可作 Python 标识符的形状 |
islower | 是否有大小写字符且都为小写 |
isnumeric | 是否全为数值字符且非空,范围比 isdigit 广 |
isprintable | 是否全为可打印字符或为空串 |
isspace | 是否全为空白字符且非空 |
istitle | 是否符合标题式大小写 |
isupper | 是否有大小写字符且都为大写 |
join | 用当前字符串连接一组字符串 |
ljust | 按宽度左对齐并填充 |
lower | 转为小写 |
lstrip | 删除左端指定字符集合 |
maketrans | 创建 translate 使用的转换表 |
partition | 按首次分隔符拆成三元组 |
removeprefix | 存在指定前缀时删除一次 |
removesuffix | 存在指定后缀时删除一次 |
replace | 替换子串,可限制次数 |
rfind | 从右侧查找,找不到返回 -1 |
rindex | 从右侧查找,找不到抛 ValueError |
rjust | 按宽度右对齐并填充 |
rpartition | 按最后一次分隔符拆成三元组 |
rsplit | 从右侧开始限制拆分次数 |
rstrip | 删除右端指定字符集合 |
split | 按分隔符拆成列表 |
splitlines | 按行边界拆分 |
startswith | 判断是否以指定前缀开始 |
strip | 删除两端指定字符集合 |
swapcase | 交换大小写 |
title | 转为标题式大小写 |
translate | 按转换表替换或删除字符 |
upper | 转为大写 |
zfill | 在符号后用 0 补齐宽度 |
COMMON PITFALLS
常见误区
- 尝试 s[0] = 'A' 原地修改字符串
- 把 strip('ab') 误解为删除完整子串 'ab'
- find 返回 -1 后直接拿去当有效下标
- 把字节长度与字符长度混为一谈
SCOPE & BOUNDARIES
适用边界
- 正则表达式不在低等级字符串必修范围,但复杂模式匹配时应使用 re,而不是堆叠大量 split/find。
- 面向用户的字符计数还可能涉及组合字符和字素簇,len 统计的是 Unicode 码点序列长度。