1. 字符串操作符
+ 拼接:连接两个字符串,生成新字符串。注意 + 两侧都必须是字符串,否则抛出 TypeError。
* 重复:字符串与整数相乘,重复复制该字符串指定次数。
in 和 not in:成员判断,判断子串是否(不)存在于原字符串中,返回布尔值。
- 比较运算符(
==、!=、>、<、>=、<=):按字典序(Unicode 码点)比较两个字符串。逐字符比较,遇到第一个不同的字符即决定大小。
len():返回字符串长度(字符个数)。
max() / min():返回最大/最小字符(按 Unicode 码点)。
2. 字符串索引
- 正向索引:从
0 开始,0 表示第一个字符,len(s)-1 表示最后一个字符。
- 反向索引:从
-1 开始,-1 表示最后一个字符,-len(s) 表示第一个字符。
- 示例:
1 2 3 4 5
| s = "Python" print(s[0]) print(s[-1]) print(s[5]) print(s[-6])
|
- 索引越界:访问超出有效范围会引发
IndexError。
3. 字符串切片(重点)
4. 字符串常用内置函数
| 函数 |
说明 |
示例 |
len(x) |
返回字符串长度(字符个数),也适用于其他序列/集合。 |
len("Python") → 6 |
str(x) |
将任意类型 x 转换为字符串。 |
str(123) → "123" |
chr(x) |
返回 Unicode 编码 x 对应的单字符。 |
chr(65) → 'A' |
ord(x) |
返回单字符 x 的 Unicode 编码(整数)。 |
ord('A') → 65 |
hex(x) |
返回整数 x 的十六进制小写形式字符串(带 0x 前缀)。 |
hex(255) → '0xff' |
oct(x) |
返回整数 x 的八进制小写形式字符串(带 0o 前缀)。 |
oct(8) → '0o10' |
注意:chr() 和 ord() 是互为逆操作;hex() 和 oct() 返回的字符串可用于 Python 代码中的进制表示。
5. 字符串常用处理方法
| 方法 |
说明 |
示例 |
str.lower() |
返回全部字符小写的副本。 |
"AbC".lower() → "abc" |
str.upper() |
返回全部字符大写的副本。 |
"AbC".upper() → "ABC" |
str.split(sep=None) |
按 sep 分割字符串,返回列表。省略 sep 时按空白(空格/换行/制表符)分割。 |
"a,b,c".split(",") → ['a','b','c'] |
str.count(sub) |
返回子串 sub 在字符串中非重叠出现的次数。 |
"aaa".count("aa") → 1 |
str.replace(old, new) |
将所有 old 替换为 new,返回新字符串。 |
"hello".replace("l","x") → "hexxo" |
str.center(width, fillchar) |
将字符串居中,用 fillchar(默认为空格)填充至宽度 width。 |
"hi".center(5,"-") → "--hi--" |
str.strip(chars) |
移除字符串左右两端出现在 chars 中的字符(默认为空白字符)。 |
" abc ".strip() → "abc";"xxabcyy".strip("xy") → "abc" |
str.join(iter) |
用 str 作为分隔符,将可迭代对象 iter 中的字符串元素连接成一个新字符串。 |
"-".join(["a","b","c"]) → "a-b-c" |
易错点:
strip() 不会移除字符串内部的指定字符。
split() 如果不指定分隔符,会连续多个空白视为一个分隔符;如果指定了具体字符,则按该字符逐个拆分(空串可能出现在结果中)。
- 通过
{} 占位符进行字符串格式化。
- 基本用法:
1 2 3
| "{}说今天天气很好".format("小李") "{0}的年龄是{1}".format("小王", 18) "{name}的年龄是{age}".format(name="小张", age=20)
|
- 格式化控制(二级常考):
"{:.2f}".format(3.14159) → "3.14"(保留两位小数)
"{:>10}".format("hi") → " hi"(右对齐,宽度10)
"{:<10}".format("hi") → "hi "(左对齐)
"{:^10}".format("hi") → " hi "(居中对齐)
"{:b}".format(10) → "1010"(二进制)
"{:x}".format(255) → "ff"(十六进制小写)
| 格式组件 |
说明 |
可选值 / 示例 |
| 引导符号 |
格式标记的起始 |
: (冒号) |
| <填充> |
用于填充的单个字符 |
任意字符,如 *, 0 等 |
| <对齐> |
对齐方式 |
< 左对齐,> 右对齐,^ 居中对齐 |
| <宽度> |
槽设定的输出宽度 |
整数,如 10 |
| <,> |
数字的千位分隔符 |
, |
| <.精度> |
浮点数小数精度 或 字符串最大输出长度 |
如 .2f 中的 2 |
| <类型> |
输出类型 |
整数:b,c,d,o,x,X;浮点:e,E,f,% |
- Python 3.6+ 支持 f-string(更简洁,但二级中
format() 仍是重点):1 2
| name = "小李" print(f"{name}说今天天气很好")
|
7. 组合数据类型
7.1 集合类型(Set)
7.1.1 特点
- 无序:元素没有顺序,不能通过索引或切片访问。
- 不重复:自动去重,元素唯一。
- 元素不可变:只能包含不可变类型(数字、字符串、元组等),不能包含列表、字典等可变类型。
- 用
{} 创建集合(但 {} 是空字典,空集合必须用 set())。
7.1.2 集合的运算(数学运算)
| 运算 |
符号 |
等价方法 |
说明 |
| 并集 |
| |
union() |
两个集合的所有元素 |
| 交集 |
& |
intersection() |
两个集合共有的元素 |
| 差集 |
- |
difference() |
在 A 中但不在 B 中的元素 |
| 对称差集 |
^ |
symmetric_difference() |
仅在 A 或仅在 B 中的元素(并集减交集) |
示例:
1 2 3 4 5 6
| A = {1, 2, 3} B = {3, 4, 5} print(A | B) print(A & B) print(A - B) print(A ^ B)
|
7.1.3 集合的常见方法
| 方法 |
说明 |
S.add(x) |
添加元素 x(若已存在则无变化)。 |
S.discard(x) |
移除元素 x,不存在时不报错(静默处理)。 |
S.remove(x) |
移除元素 x,不存在时抛出 KeyError。 |
S.clear() |
清空集合中所有元素。 |
S.pop() |
随机弹出一个元素并返回;若集合为空,抛出 KeyError。 |
S.copy() |
返回集合的浅拷贝副本。 |
len(S) |
返回集合元素个数。 |
x in S / x not in S |
判断元素是否在集合中。 |
set(x) |
将其他可迭代对象 x 转换为集合(自动去重)。 |
7.1.4 定义空集合
7.2 序列类型(列表、元组)
7.2.1 列表(List)
7.2.1.1 特点
- 有序:元素按插入顺序存储。
- 可重复:允许重复元素。
- 可变:可增删改元素。
- 支持索引和切片:可通过下标访问和截取子列表。
7.2.1.2 列表常用的操作符与函数
| 操作符/函数 |
说明 |
x in s / x not in s |
判断元素是否在列表中。 |
len(s) |
返回列表长度。 |
min(s) / max(s) |
返回列表中的最小/最大元素(要求元素可比较)。 |
s1 + s2 |
列表拼接,返回新列表。 |
s * n |
列表重复,返回新列表。 |
7.2.1.3 列表常用操作方法
| 方法 |
说明 |
是否原地修改 |
ls.append(x) |
在末尾添加一个元素 x。 |
是 |
ls.insert(i, x) |
在索引 i 处插入元素 x。 |
是 |
ls.clear() |
清空所有元素。 |
是 |
ls.pop(i) |
删除并返回索引 i 的元素(默认最后一个)。 |
是 |
ls.remove(x) |
删除第一个值为 x 的元素(若不存在则报错)。 |
是 |
ls.reverse() |
将列表元素反转(原地)。 |
是 |
ls.index(x) |
返回第一个值为 x 的索引;若不存在,抛出 ValueError。 |
否(查询) |
ls.count(x) |
返回 x 在列表中出现的总次数。 |
否(查询) |
ls.copy() |
返回列表的浅拷贝副本。 |
否(返回新列表) |
7.2.1.4 列表的 copy() 方法示例
1 2 3 4
| a = [34, 3434, [1, 2]] b = a.copy() b[2].append(3) print(a)
|
重要:浅拷贝只复制外层容器,内层可变对象仍共享同一引用。需要深拷贝可使用 copy.deepcopy()。
7.2.2 元组(Tuple)
7.2.2.1 特点
- 有序、可重复、支持索引和切片。
- 不可变:一旦创建,不能增删改元素(但如果元素是可变对象,如列表,则该对象的内部状态可以改变)。
- 定义单元素元组时需加逗号:
t = (1,),否则会被视为普通括号。
7.2.2.2 元组常用的操作符与函数
| 操作符/函数 |
说明 |
x in s / x not in s |
判断元素是否在元组中。 |
len(s) |
返回元组长度。 |
min(s) / max(s) |
返回最小/最大元素。 |
t.index(x) |
返回第一个值为 x 的索引;若不存在,抛出 ValueError。 |
t.count(x) |
返回 x 在元组中出现的次数。 |
与列表的核心区别:元组不可变,因此没有 append、insert、pop、remove 等修改方法。
7.3 映射类型(字典,Dict)
7.3.1 特点
- 键值对存储,键(key)唯一,值(value)可重复。
- 键必须是不可变类型(字符串、数字、元组等),值可以是任意类型。
- 无序(Python 3.7 起按插入顺序保留,但二级考试一般不强调有序性)。
- 可变:可增删改键值对。
7.3.2 字典常用的函数
| 函数 |
说明 |
len(d) |
返回键值对个数。 |
min(d) / max(d) |
返回字典中键的最小/最大值(按键比较)。 |
d[key] |
通过键访问值;若键不存在,抛出 KeyError。 |
7.3.3 字典常用的操作方法
| 方法 |
说明 |
返回值 |
d.keys() |
返回所有键的视图对象(可迭代)。 |
视图 |
d.values() |
返回所有值的视图对象(可迭代)。 |
视图 |
d.items() |
返回所有键值对的视图对象(元素为元组 (key, value))。 |
视图 |
d.get(key, default) |
键存在返回对应值,否则返回 default(默认 None),不抛出异常。 |
值 或 default |
d.pop(key, default) |
键存在则删除并返回对应值;不存在返回 default(若未指定则抛出 KeyError)。 |
值 或 default |
d.popitem() |
弹出并返回一个键值对(元组形式),遵循后进先出(Python 3.7+ 按插入顺序逆序)。 |
(key, value) |
d.clear() |
清空字典所有键值对。 |
None |
d.update(other) |
用其他字典或键值对更新当前字典(若键已存在则覆盖值)。 |
None |
d.setdefault(key, default) |
若键存在返回对应值;若不存在则插入键并设为 default(默认为 None)。 |
值 |
示例:
1 2 3 4
| d = {"name": "张三", "age": 20} print(d.get("gender", "未知")) d.update({"age": 21, "city": "北京"}) print(d)
|
易错点:d[key] 和 d.get(key) 的区别——前者键不存在时报错,后者返回 None 或指定默认值,更安全。