前言
简单记录一下Python中字符串相关的使用,也是比较基础的,常见的使用方式。
记录于此,方便自己回顾。
正文
创建字符串
s1 = "单引号" # 推荐 s2 = '双引号,可以含"引号"' # 内部有双引号时用 s3 = """三引号 多行""" # 保留换行 s4 = str(123) # 其它类型转字符串 s5 = '重复' * 3 # 重复 → '重复重复重复'
| 方式 | 适用场景 |
| "" | 默认首选 |
| '' | 内部含 " 时 |
| """ | 多行文本、docstring |
| str(x) | 数字/对象转字符串 |
| s * n | 重复拼接 |
索引 / 切片 / 长度 / 遍历
字符串是字符序列,用法和列表一模一样(下标从 0 开始)。
s = "一二三四五六日" s[0] # '一' 正向:从 0 开始 s[2] # '三' s[-1] # '日' 反向:从 -1 开始(倒数第一个)
还存在下面这种写法很常见,一样的
"一二三四五六日"[1] # '一' "一二三四五六日"[2] # '三'
切片 [起:止:步长](止的位置不含):
s[2:5] # '三四五' 从 2 到 5(不含 5) s[:3] # '一二三' 从头到 3 s[4:] # '五六日' 从 4 到尾 s[::2] # '一三五日' 每隔 2 个取一个 s[::-1] # '日六五四三二一' 倒序(经典技巧)
长度和遍历:
len(s) # 7 [c for c in s] # ['一','二','三','四','五','六','日']
下标越界会报 IndexError:7 个元素的合法下标是 0~6,取 [7] 直接崩。
拼接与成员判断
"星期" + "三" # '星期三' 用 + 拼接 "-".join(["2026","10","28"]) # '2026-10-28' 用分隔符连接列表 "三" in "一二三" # True 成员判断 "八" not in s # True 反向判断
| 操作 | 写法 | 说明 |
| 两串相加 | a + b | 少量拼接可用 |
| 多串连接 | "sep".join(list) | 循环里必用,效率高 |
| 是否包含 | sub in s | 返回 True/False |
| 是否不含 | sub not in s | 同上取反 |
常用处理方法
核心原则:字符串不可变,所有方法都返回新字符串,原串不动。
以 t = " Hello Python 3.10 " 为例:
| 方法 | 结果 | 作用 |
|---|---|---|
| t.strip() | 'Hello Python 3.10' | 去掉首尾空白 |
| t.lstrip() | 'Hello Python 3.10 ' | 只去左边 |
| t.rstrip() | ' Hello Python 3.10' | 只去右边 |
| t.lower() | ' hello python 3.10 ' | 全小写 |
| t.upper() | ' HELLO PYTHON 3.10 ' | 全大写 |
| t.replace("Python","World") | ' Hello World 3.10 ' | 替换 |
| t.split() | ['Hello','Python','3.10'] | 按空白切成列表 |
| "a,b,c".split(",") | ['a','b','c'] | 按指定分隔符切 |
| "a=b=c".partition("=") | ('a', '=', 'b=c') | 切成 3 元组(从左) |
| "a=b=c".rpartition("=") | ('a=b', '=', 'c') | 切成 3 元组(从右) |
| "行1 行2".splitlines() | ['行1','行2'] | 按行切 |
| t.find("Py") | 8 | 找下标,找不到返回 -1 |
| t.index("Py") | 8 | 找下标,找不到抛异常 |
find vs index 怎么选:
- 不确定是否存在 → 用 find(返回 -1 更安全)
- 确定一定存在 → 用 index(不存在直接报错,方便排查)
判断方法
| 方法 | '123' | '一二三' | '½' | 'ab1' | ' ' | '你好' | 'Hello' |
| .isdigit() | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| .isdecimal() | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| .isnumeric() | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| .isalpha() | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ |
| .isalnum() | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ |
| .isspace() | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
| .istitle() | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
| .islower() | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ |
| .isupper() | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
| .isidentifier() | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ✅ |
关键区分:
- isdigit:只认 0-9 的阿拉伯数字,中文数字不算;
- isdecimal:比 isdigit 更严,只认十进制数字字符;
- isnumeric:最宽,中文数字 '一二三'、分数 '½' 都算;
- isalnum:字母或数字(或中文)就返回 True,含符号就 False;
- isidentifier:能不能当变量名(123 开头不行,所以 False)。
记住口诀:想判断"是不是数字"用 isdigit;想连中文数字一起认,用 isnumeric。
对齐与填充
"42".zfill(5) # '00042' 左侧补零到 5 位 "hi".center(10, "*") # '****hi****' 居中,两边补 * "hi".ljust(10, "-") # 'hi--------' 左对齐,右边补 - "hi".rjust(10, "-") # '--------hi' 右对齐,左边补 -
表格、报表对齐输出时特别常用,zfill 做编号补零(如 001、002)最方便。
格式化
name, age = "张三", 18
f"{name} 今年 {age} 岁,明年 {age+1} 岁" # ✅ 首选,最清晰
"{} 今年 {} 岁".format(name, age) # 位置参数
"{0} 和 {1} 和 {0}".format(name, "李四") # 索引复用
"{n} 今年 {a} 岁".format(n=name, a=age) # 命名参数格式规格(对齐 / 补零 / 精度):
f"|{42:5d}|{3.14159:+.2f}|{7:0>4d}|{'hi':<6}|"
# 输出:| 42|+3.14|0007|hi || 规格 | 含义 |
| :5d | 整数占 5 位,右对齐 |
| :+.2f | 带符号、保留 2 位小数 |
| :0>4d | 右对齐,左侧补零到 4 位 |
| :<6 | 左对齐,占 6 位 |
| .2% | 百分比,保留 2 位 → 12.34% |
| :e | 科学计数法 → 1.000000e+06 |
转义与原始字符串
"换\n行\t制表" # \n 换行、\t 制表符会被解释 r"\d+\.\d+" # 原始字符串:反斜杠不转义,写正则必备 r"C:\Users\test\new" # Windows 路径不用双写反斜杠
常用转义符:\n 换行、\t 制表、\\ 反斜杠本身、\' 单引号、\" 双引号。
编码 encode / decode
"中文".encode("utf-8") # b'\xe4\xb8\xad\xe6\x96\x87',占 6 字节
b'\xe4\xb8\xad\xe6\x96\x87'.decode("utf-8") # '中文'
"中文".encode("gbk") # b'\xd6\xd0\xce\xc4',占 4 字节| 编码 | 一个中文占字节 | 说明 |
| UTF-8 | 3 字节 | 通用标准,默认用它 |
| GBK | 2 字节 | 老系统 / Windows 中文环境 |
encode 得到的是 bytes 对象,decode 只能对 bytes 用,且编码要对应,否则抛 UnicodeDecodeError。
不可变性
s = "hello" print(id(s)) # 140294226006320 s = s + "!" print(id(s)) # 140294226016752 ← 变了,是新对象
字符串不能原地修改:
s[0] = "H" # ❌ TypeError: 'str' object does not support item assignment
想"改"只能生成新串:s = "H" + s[1:]。这也是为什么大量拼接要用 join 而不是循环 +=:
# ❌ 循环里 += 会不断创建新对象,慢
# ✅ 先收集到列表,再 join 一次完成
"".join([f"第{i}段" for i in range(6)]) # '第0段第1段第2段第3段第4段第5段'全局速查表
| 分类 | 核心操作 | 返回 |
| 创建 | "..." / str(x) / s*n | str |
| 访问 | s[i] / s[a:b:c] / len(s) / for c in s | str / int |
| 拼接 | a+b / "sep".join(list) | str |
| 查找 | s.find(sub) / s.index(sub) / sub in s | int / bool |
| 清洗 | strip / replace / split / partition | str / list |
| 判断 | isdigit / isnumeric / isalpha / isspace … | bool |
| 变形 | lower / upper / zfill / center / ljust | str |
| 格式化 | f-string / format / 格式规格 | str |
| 编码 | encode / decode | bytes / str |
参考文章
- AI
- Python文档
