一、概述
集合(Set)是 Python 中的一种内置数据结构,主要用于存储唯一的元素。集合的主要特点包括:
- 无序性:集合中的元素没有固定的顺序,不能通过索引访问。
- 唯一性:集合中的每个元素都是唯一的,不能重复。
- 可变性:集合是可变的,可以动态添加、删除元素。
集合通常用于数据去重、数学集合运算(如并集、交集等)以及高效查找数据。
二、集合的创建
集合可以通过花括号 {}
或 set()
函数来创建。需要注意的是,空集合只能用 set()
函数创建,而使用 {}
创建的是一个空字典。
示例:
# 使用花括号创建集合
my_set = {1, 2, 3, 4}
print(my_set) # 输出: {1, 2, 3, 4}# 使用 set() 函数创建集合
another_set = set([1, 2, 3])
print(another_set) # 输出: {1, 2, 3}# 创建空集合
empty_set = set()
print(empty_set) # 输出: set()# 创建含重复元素的集合
duplicate_set = {1, 1, 2, 3}
print(duplicate_set) # 输出: {1, 2, 3}(重复元素被自动去掉)
三、集合的基本操作
1. 添加元素
可以使用 add()
方法向集合中添加一个元素。如果元素已经存在,集合不会发生变化。
示例:
my_set = {1, 2, 3}
my_set.add(4)
print(my_set) # 输出: {1, 2, 3, 4}
2. 删除元素
可以使用 remove()
、discard()
或 pop()
方法删除集合中的元素。
-
remove()
:如果元素不存在,将引发KeyError
。my_set.remove(2) print(my_set) # 输出: {1, 3, 4}
-
discard()
:如果元素不存在,不会引发错误。my_set.discard(5) # 不会报错 print(my_set) # 输出: {1, 3, 4}
-
pop()
:随机删除并返回集合中的一个元素。如果集合为空,会引发KeyError
。removed_element = my_set.pop() print(removed_element) # 输出: 随机选择的元素 print(my_set) # 输出: 剩下的元素
3. 清空集合
使用 clear()
方法可以清空集合中的所有元素。
示例:
my_set.clear()
print(my_set) # 输出: set()
4. 集合的长度
使用 len()
函数可以获取集合中元素的数量。
示例:
my_set = {1, 2, 3}
print(len(my_set)) # 输出: 3
四、集合的数学运算
集合支持多种数学运算,包括并集、交集、差集和对称差集。
1. 并集(Union)
使用 union()
方法或 |
运算符计算并集。
示例:
set1 = {1, 2, 3}
set2 = {3, 4, 5}
union_set = set1.union(set2)
print(union_set) # 输出: {1, 2, 3, 4, 5}# 也可以使用 |
union_set = set1 | set2
print(union_set) # 输出: {1, 2, 3, 4, 5}
2. 交集(Intersection)
使用 intersection()
方法或 &
运算符计算交集。
示例:
intersection_set = set1.intersection(set2)
print(intersection_set) # 输出: {3}# 也可以使用 &
intersection_set = set1 & set2
print(intersection_set) # 输出: {3}
3. 差集(Difference)
使用 difference()
方法或 -
运算符计算差集。
示例:
difference_set = set1.difference(set2)
print(difference_set) # 输出: {1, 2}# 也可以使用 -
difference_set = set1 - set2
print(difference_set) # 输出: {1, 2}
4. 对称差集(Symmetric Difference)
使用 symmetric_difference()
方法或 ^
运算符计算对称差集。
示例:
symmetric_difference_set = set1.symmetric_difference(set2)
print(symmetric_difference_set) # 输出: {1, 2, 4, 5}# 也可以使用 ^
symmetric_difference_set = set1 ^ set2
print(symmetric_difference_set) # 输出: {1, 2, 4, 5}
五、集合关系运算
集合也支持一些关系运算,比如子集、超集和不相交等:
-
子集:使用
issubset()
方法检查一个集合是否是另一个集合的子集。set1 = {1, 2} set2 = {1, 2, 3, 4} print(set1.issubset(set2)) # 输出: True
-
超集:使用
issuperset()
方法检查一个集合是否是另一个集合的超集。print(set2.issuperset(set1)) # 输出: True
-
不相交:使用
isdisjoint()
方法检查两个集合是否没有交集。set3 = {4, 5, 6} print(set1.isdisjoint(set3)) # 输出: True
六、遍历集合
可以使用 for
循环遍历集合中的元素:
my_set = {1, 2, 3, 4}
for element in my_set:print(element) # 输出: 集合中的每个元素(顺序可能不同)
七、冻结集合(frozenset)
frozenset
是不可变的集合,创建后不能修改。适用于需要集合但不希望其改变的场景。
示例:
frozen_set = frozenset([1, 2, 3, 4])
print(frozen_set) # 输出: frozenset({1, 2, 3, 4})# frozen_set.add(5) # 会引发 AttributeError