4. 集合(set)
在Python中,集合(set)是一个无序的不重复元素集。集合用于存储唯一元素,这意味着集合中的所有元素都是唯一的,没有两个元素可以相同。集合是可变的,你可以在创建后添加或删除元素。
4.1 创建集合
集合使用大括号 {} 创建,或者使用 set() 函数。集合中的元素之间用逗号 , 分隔。
# 使用大括号创建集合
my_set = {1, 2, 3}
# 使用 set() 函数创建集合
another_set = set([1, 2, 3, 3]) # 从列表创建集合,重复元素会被自动去除
4.2 访问集合元素
由于集合是无序的,你不能通过索引来访问元素。但你可以使用循环来遍历集合中的所有元素。
# 遍历集合
for element in my_set:
print(element)
4.3 添加元素
可以使用 add() 方法向集合添加元素。
# 向集合添加新元素
my_set.add(4)
4.4 删除元素
可以使用 remove() 方法删除集合中的元素。如果元素不存在,remove() 方法会抛出 KeyError。如果你想避免这个错误,可以使用 discard() 方法,它在元素不存在时不会抛出错误。
# 删除元素
my_set.remove(2) # 如果元素不存在,会抛出 KeyError
# 安全地删除元素
my_set.discard(2)
4.5 集合运算
集合支持多种集合运算,包括并集、交集、差集和对称差集。
- union(): 返回两个集合的并集。
- intersection(): 返回两个集合的交集。
- difference(): 返回第一个集合与第二个集合的差集。
- symmetric_difference(): 返回两个集合的对称差集(存在于一个集合中,但不同时存在于两个集合中的元素)。
set1 = {1, 2, 3}
set2 = {3, 4, 5}
# 并集
union_set = set1.union(set2) # {1, 2, 3, 4, 5}
# 交集
intersection_set = set1.intersection(set2) # {3}
# 差集
difference_set = set1.difference(set2) # {1, 2}
# 对称差集
symmetric_difference_set = set1.symmetric_difference(set2) # {1, 2, 4, 5}
注意事项 集合中的元素必须是不可变类型,如字符串、数字或元组。 集合是无序的,所以你不能依赖元素的顺序。 集合不支持索引、切片或其他列表和字典的操作。 集合在Python 3.5及更高版本中支持直接使用大括号 {} 作为字面量创建。
示例
# 使用集合
my_set = {1, 2, 3}
# 添加新元素
my_set.add(4)
# 删除元素
my_set.remove(2) # 如果元素不存在,会抛出 KeyError
# 集合运算
set1 = {1, 2}
set2 = {2, 3}
print(set1.union(set2)) # 输出 {1, 2, 3}
print(set1.intersection(set2)) # 输出 {2}
print(set1.difference(set2)) # 输出 {1}
print(set1.symmetric_difference(set2)) # 输出 {1, 3}
集合的特点
集合(set)是Python中的另一种基本数据结构,具有以下特点:
- 无序性:集合中的元素是无序的,这意味着你不能通过索引或位置来访问集合中的元素,也不能依赖元素的顺序。
- 不重复性:集合中的元素是唯一的,即集合不能包含两个相同的元素。如果尝试添加一个已经存在的元素,集合将保持不变。
- 可变性:集合是可变的,你可以在创建后添加或删除元素。
- 使用大括号:集合使用大括号 {} 来定义,元素之间用逗号 , 分隔。注意,即使使用大括号,集合中的元素也是无序的。
- 支持集合运算:集合支持多种集合运算,如并集(union)、交集(intersection)、差集(difference)和对称差集(symmetric_difference)。
- 快速查找:集合提供了非常快速的查找速度,因为它们使用哈希表实现。这使得检查一个元素是否在集合中的时间复杂度接近O(1)。
- 不支持索引:由于集合是无序的,它们不支持索引、切片或其他序列类型的操作。
- 可以为空:集合可以是空的,即不包含任何元素。
- 可以包含任何不可变类型的元素:集合中的元素必须是不可变类型,如整数、浮点数、字符串或元组。这意味着你不能将列表或字典等可变类型作为集合的元素。
- 不支持迭代键值对:与字典不同,集合不支持迭代键值对,因为集合没有键值对的概念,只有元素。
- 丰富的内置方法:集合提供了多种内置方法,如 add(), clear(), copy(), difference(), discard(), intersection(), isdisjoint(), issubset(), issuperset(), pop(), remove(), symmetric_difference(), union(), update() 等,这些方法使得操作集合变得非常方便。