Python 3 集合(Set)详解
1. 集合(Set)概述
Python 集合(Set)是一种无序、可变、元素唯一的数据结构,类似于数学中的集合。集合适用于去重、关系运算(交集、并集、差集等)。
集合特点
- 无序:集合中的元素没有固定的顺序。
- 唯一性:集合中的元素不允许重复。
- 可变性:集合可以进行增删操作。
📌 示例:创建一个集合
# 定义集合
numbers = {1, 2, 3, 4, 5}
print(numbers) # {1, 2, 3, 4, 5}
# 集合自动去重
nums = {1, 2, 2, 3, 4, 4}
print(nums) # {1, 2, 3, 4}
2. 创建集合
(1)使用 {} 直接创建
my_set = {1, 2, 3, 4, 5}
print(my_set) # {1, 2, 3, 4, 5}
(2)使用 set() 函数
可以将列表、元组、字符串等转换为集合。
my_list = [1, 2, 3, 3, 4]
my_set = set(my_list)
print(my_set) # {1, 2, 3, 4}
(3)创建空集合
⚠ 注意:空集合不能用 {},会变成字典,必须用 set()。
empty_set = set()
print(type(empty_set)) # <class 'set'>
3. 访问集合元素
集合不能通过索引访问元素,因为它是无序的,但可以使用 for 循环遍历:
my_set = {1, 2, 3, 4}
for item in my_set:
print(item)
4. 添加和删除元素
(1)添加元素
add():向集合添加单个元素。update():向集合添加多个元素(列表、元组、字符串)。
my_set = {1, 2, 3}
my_set.add(4) # 添加单个元素
print(my_set) # {1, 2, 3, 4}
my_set.update([5, 6, 7]) # 添加多个元素
print(my_set) # {1, 2, 3, 4, 5, 6, 7}
(2)删除元素
remove(value):删除指定元素,如果不存在则报错。discard(value):删除指定元素,不存在不会报错。pop():随机删除一个元素(因为集合无序)。clear():清空集合。
my_set = {1, 2, 3, 4, 5}
my_set.remove(3) # 删除 3
print(my_set) # {1, 2, 4, 5}
my_set.discard(6) # 删除 6,不报错
print(my_set) # {1, 2, 4, 5}
element = my_set.pop() # 随机删除一个元素
print(f"删除了 {element}, 剩余集合 {my_set}")
my_set.clear() # 清空集合
print(my_set) # set()
5. 集合运算
Python 集合支持并集、交集、差集、对称差集等操作。
(1)并集(| 或 union())
包含所有元素,去重。
set1 = {1, 2, 3}
set2 = {3, 4, 5}
print(set1 | set2) # {1, 2, 3, 4, 5}
print(set1.union(set2)) # {1, 2, 3, 4, 5}
(2)交集(& 或 intersection())
只保留共同的元素。
print(set1 & set2) # {3}
print(set1.intersection(set2)) # {3}
(3)差集(- 或 difference())
返回在 set1 中但不在 set2 中的元素。
print(set1 - set2) # {1, 2}
print(set1.difference(set2)) # {1, 2}
(4)对称差集(^ 或 symmetric_difference())
返回不同时出现在两个集合中的元素(去掉公共部分)。
print(set1 ^ set2) # {1, 2, 4, 5}
print(set1.symmetric_difference(set2)) # {1, 2, 4, 5}
6. 集合比较
集合支持子集、超集、相等性比较。
| 方法 | 说明 | 示例 |
|---|---|---|
issubset() | 是否是子集 | set1.issubset(set2) |
issuperset() | 是否是超集 | set1.issuperset(set2) |
isdisjoint() | 是否无交集 | set1.isdisjoint(set2) |
a = {1, 2, 3}
b = {1, 2, 3, 4, 5}
print(a.issubset(b)) # True,a 是 b 的子集
print(b.issuperset(a)) # True,b 是 a 的超集
print(a.isdisjoint({4, 5})) # True,a 和 {4,5} 没有交集
7. 集合推导式
集合推导式(Set Comprehension)可以快速生成集合。
📌 示例:创建平方数集合
squares = {x**2 for x in range(1, 6)}
print(squares) # {1, 4, 9, 16, 25}
📌 示例:过滤重复元素
numbers = [1, 2, 2, 3, 4, 4, 5]
unique_numbers = {x for x in numbers}
print(unique_numbers) # {1, 2, 3, 4, 5}
8. 冻结集合(frozenset)
frozenset 是不可变的集合,一旦创建就不能修改(适用于字典的键等)。
fset = frozenset([1, 2, 3, 4])
print(fset) # frozenset({1, 2, 3, 4})
# fset.add(5) # ❌ 会报错,frozenset 不能修改
9. 总结
✅ 集合是无序、唯一的容器
✅ 支持并集、交集、差集、对称差集等操作
✅ 支持 add() 添加,remove() 或 discard() 删除
✅ frozenset 是不可变集合
✅ 适用于去重、集合运算、快速查找 🚀
集合在 Python 中非常实用,特别是数据去重和数学运算!更多详细内容请关注其他相关!