1. 集合与固定集合简介
1.1 集合(set
)
特点:
集合是一个可变的容器,用于存储唯一的、不可变的元素。
集合中的元素是无序的。
集合的元素必须是不可变类型(如整数、字符串、元组),不能存储列表、字典等可变类型。
1.2 固定集合(frozenset
)
固定集合是一个不可变的集合,一旦创建,不能修改。
固定集合的元素也必须是不可变类型。
2. 集合与固定集合创建
2.1 创建集合
# 创建空集合
s1 = set()
# 创建非空集合
s2 = {1, 2, 3, 4}
# 从可迭代对象创建集合
s3 = set(range(5)) # {0, 1, 2, 3, 4}
s4 = set("ABC") # {'A', 'B', 'C'}
s5 = set([1, 2, 3]) # {1, 2, 3}
2.2 创建固定集合
# 创建空固定集合
fs1 = frozenset()
# 创建非空固定集合
fs2 = frozenset([1, 2, 3]) # frozenset({1, 2, 3})
fs3 = frozenset("ABC") # frozenset({'A', 'B', 'C'})
3. 集合操作
3.1 添加元素
s = {1, 2, 3}
# 添加单个元素
s.add(4)
print(s) # 输出:{1, 2, 3, 4}
# 添加多个元素
s.update([5, 6])
print(s) # 输出:{1, 2, 3, 4, 5, 6}
3.2 删除元素
s = {1, 2, 3, 4, 5}
# 删除指定元素
s.remove(3)
print(s) # 输出:{1, 2, 4, 5}
# 删除指定元素(如果存在)
s.discard(2)
print(s) # 输出:{1, 4, 5}
# 随机删除一个元素
s.pop()
print(s) # 输出:{4, 5}
# 清空集合
s.clear()
print(s) # 输出:set()
3.3 访问与修改
集合是无序的,不能通过索引访问元素。如果需要访问元素,可以通过遍历或转换为列表。
遍历集合
s = {1, 2, 3}
for item in s:
print(item)
转换为列表
s = {1, 2, 3}
lst = list(s)
print(lst) # 输出:[1, 2, 3]
3.4 判断元素是否存在
s = {1, 2, 3}
print(2 in s) # 输出:True
print(4 in s) # 输出:False
4. 集合常用 API
4.1 常用方法
方法 | 描述 |
---|---|
s.add(x) | 添加元素 x 到集合 s。 |
s.update(x) | 添加多个元素到集合 s。 |
s.remove(x) | 删除集合 s 中的元素 x,如果 x 不存在则报错。 |
s.discard(x) | 删除集合 s 中的元素 x,如果 x 不存在则不报错。 |
s.pop() | 随机删除并返回集合 s 中的一个元素。 |
s.clear() | 清空集合 s。 |
s.copy() | 返回集合 s 的浅拷贝。 |
s.union(t) | 返回集合 s 和 t 的并集。 |
s.intersection(t) | 返回集合 s 和 t 的交集。 |
s.difference(t) | 返回集合 s 和 t 的差集(s 中有但 t 中没有的元素)。 |
s.symmetric_difference(t) | 返回集合 s 和 t 的对称差集(s 和 t 中不重复的元素)。 |
s.issubset(t) | 判断集合 s 是否是 t 的子集。 |
s.issuperset(t) | 判断集合 s 是否是 t 的超集。 |
s.isdisjoint(t) | 判断集合 s 和 t 是否没有交集。 |
s = {1, 2, 3}
s.update([4, 5, 6])
print(s) # 输出:{1, 2, 3, 4, 5, 6}
s = {1, 2, 3}
t = {3, 4, 5}
result = s.union(t)
print(result) # 输出:{1, 2, 3, 4, 5}
result = s.intersection(t)
print(result) # 输出:{3}
result = s.symmetric_difference(t)
print(result) # 输出:{1, 2, 4, 5}
5. 集合的坑与小技巧
5.1 集合的元素必须是不可变类型
集合的元素必须是不可变类型(如整数、字符串、元组),不能存储列表、字典等可变类型。
错误示例:
s = {[1, 2], [3, 4]} # 报错:TypeError: unhashable type: 'list'
正确示例:
s = {(1, 2), (3, 4)} # 使用元组作为元素
5.2 集合的无序性
集合中的元素是无序的,因此不能通过索引访问元素。
s = {1, 2, 3}
print(s[0]) # 报错:TypeError: 'set' object is not subscriptable
5.3 使用集合去重
集合的一个常见用途是去除列表中的重复元素。
lst = [1, 2, 2, 3, 4, 4, 5]
unique_lst = list(set(lst))
print(unique_lst) # 输出:[1, 2, 3, 4, 5]
5.4 固定集合的不可变性
固定集合是不可变的,因此不能添加或删除元素。
fs = frozenset([1, 2, 3])
fs.add(4) # 报错:AttributeError: 'frozenset' object has no attribute 'add'