1. 字符串操作符

  • + 拼接:连接两个字符串,生成新字符串。注意 + 两侧都必须是字符串,否则抛出 TypeError
  • * 重复:字符串与整数相乘,重复复制该字符串指定次数。
  • innot 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]) # 'P'
    print(s[-1]) # 'n'
    print(s[5]) # 'n'
    print(s[-6]) # 'P'
  • 索引越界:访问超出有效范围会引发 IndexError

3. 字符串切片(重点)

  • 格式[开始 : 结束 : 步长]

    • 开始结束步长 均可省略。
    • 遵循 左闭右开 原则:包含 开始 索引对应的字符,不包含 结束 索引对应的字符。
    • 省略 开始:默认从字符串开头(正向步长)或结尾(负向步长)。
    • 省略 结束:默认到字符串末尾(正向步长)或开头(负向步长)。
    • 省略 步长:默认为 1
  • 常用切法

    1
    2
    3
    4
    5
    6
    7
    s = "HelloWorld"
    print(s[0:5]) # "Hello"
    print(s[:5]) # "Hello"(省略开始)
    print(s[5:]) # "World"(省略结束)
    print(s[:]) # "HelloWorld"(全复制)
    print(s[::2]) # "HloWrd"(步长2)
    print(s[1:8:2]) # "elWr"(索引1,3,5,7)
  • 负步长切片

    • 表示从右向左取字符,此时 开始 应大于 结束(否则结果为空)。
    • 示例:
      1
      2
      print(s[::-1])   # "dlroWolleH"(反转字符串)
      print(s[5:0:-1]) # "Wolle"(从索引5到1,步长-1)
  • 切片不会出现索引越界:若 开始结束 超出范围,Python 会自动截取到有效边界,不会报错(这是切片与索引的重要区别)。

  • 切片返回的是新字符串,不修改原字符串(字符串不可变)。


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() 如果不指定分隔符,会连续多个空白视为一个分隔符;如果指定了具体字符,则按该字符逐个拆分(空串可能出现在结果中)。

6. format() 方法的使用

  • 通过 {} 占位符进行字符串格式化。
  • 基本用法
    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) # {1, 2, 3, 4, 5}
print(A & B) # {3}
print(A - B) # {1, 2}
print(A ^ B) # {1, 2, 4, 5}

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 定义空集合

1
2
s = set()          # 正确:空集合
s = {} # 错误:这是空字典!

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) # [34, 3434, [1, 2, 3]] —— 原列表被影响!

重要:浅拷贝只复制外层容器,内层可变对象仍共享同一引用。需要深拷贝可使用 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 在元组中出现的次数。

与列表的核心区别:元组不可变,因此没有 appendinsertpopremove 等修改方法。


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) # {'name': '张三', 'age': 21, 'city': '北京'}

易错点d[key]d.get(key) 的区别——前者键不存在时报错,后者返回 None 或指定默认值,更安全。