一、集合(set)核心概念
- 3. 元素要求:必须是不可变类型(int、float、str、tuple)
- 4. 不能存放:列表、字典、集合(可变类型不能哈希)
- 5. 核心用途:去重、关系运算(交集/并集/差集)
二、集合的创建
1. 直接创建
# 普通集合
s1 = {1, 2, 3, 4}
# 自动去重
s2 = {1, 2, 2, 3, 3, 3}
print(s2) # {1, 2, 3}
2. 空集合创建(重点易错)
s_empty = set()
print(type(s_empty)) # <class 'set'>
3. set() 强制转换创建
可迭代对象:列表、元组、字符串、range
# 列表转集合(快速去重)
lst = [1, 2, 2, 3]
s3 = set(lst)
print(s3)
# 字符串转集合
s4 = set("abccba")
print(s4) # {'a','b','c'}
# 区间转集合
s5 = set(range(1, 6))
三、集合四大运算(重点)
定义两个集合:
a = {1, 2, 3, 4, 5}
b = {4, 5, 6, 7, 8}
1. 并集:所有元素合并,自动去重
符号:|
方法:.union()
# 运算符
res1 = a | b
# 方法调用
res2 = a.union(b)
print(res1) # {1,2,3,4,5,6,7,8}
2. 交集:两个集合共同拥有的元素
符号:&
方法:.intersection()
res = a & b
print(res) # {4, 5}
3. 差集:属于A但不属于B的元素
符号:-
方法:.difference()
# a 差 b:a 独有
res = a - b
print(res) # {1, 2, 3}
4. 对称差集:互相独有、去掉公共元素
符号:^
方法:.symmetric_difference()
res = a ^ b
print(res) # {1,2,3,6,7,8}
四、集合常用增删改查方法
集合无序,没有索引、没有切片,不能通过下标取值。
1. add():添加单个元素
s = {1, 2, 3}
s.add(4)
s.add(2) # 元素已存在,无报错、无效果
print(s) # {1,2,3,4}
2. update():批量添加多个元素
接收可迭代对象:列表、元组、字符串、集合
s = {1, 2}
s.update([3, 4])
s.update("ab")
print(s)
3. remove():删除指定元素
s = {1, 2, 3}
s.remove(2)
# s.remove(99) # KeyError 报错
4. discard():删除指定元素(推荐)
s = {1, 2, 3}
s.discard(2)
s.discard(99) # 无报错,无操作
5. pop():随机删除一个元素
集合无序,随机弹出,无参数
s = {10, 20, 30}
num = s.pop()
print(num)
6. clear():清空集合
s.clear()
print(s) # set()
五、集合关系判断
x = {1, 2}
y = {1, 2, 3, 4}
# 子集:x 所有元素都在 y 中
print(x.issubset(y)) # True
# 超集:y 包含 x 全部元素
print(y.issuperset(x)) # True
# 两个集合无交集
print(x.isdisjoint({5,6})) # True
六、集合特点总结 & 易错点
1. 核心特点
- 3. 元素必须不可变(str/int/tuple)
2. 高频易错
- 2.
remove 删不存在元素报错,discard 不报错
📚 课后练习题(带详细解析)
练习1:列表快速去重
利用集合特性,对列表去重并保留唯一元素
lst = [2, 2, 5, 5, 7, 9, 9]
new_lst = list(set(lst))
print(new_lst)
练习2:集合运算
s1 = {1,3,5,7}
s2 = {3,5,9,11}
print(s1 & s2) # 交集
print(s1 | s2) # 并集
print(s1 - s2) # 差集
练习3:删除元素区别
s = {10, 20, 30}
# s.remove(99) # 报错
s.discard(99) # 安全无报错
print(s)
📌 全文知识点速记
- 1. 创建:
{元素}、set(可迭代对象)、空集合 set() - • 并集
| / 交集 & / 差集 - / 对称差 ^
- • 删除:
remove()(报错)、discard()(安全)、pop()、clear()
- 4. 专属方法:
union()、intersection()、difference()