Python 集合(Set)是一种无序、可变、不重复的数据集合。集合是基于哈希表实现的,因此具有高效的查找和插入操作。
集合特性:
-
无序性:集合中的元素没有特定的顺序。在集合中添加、删除或查找元素时,不会受到元素的顺序影响。 -
不重复性:集合中不允许重复的元素。如果尝试添加相同的元素多次,集合只会包含一个唯一的副本。
unique_colors = {"红色", "绿色", "蓝色", "绿色"} # 创建集合时去重
# unique_colors 的值为 {"红色", "绿色", "蓝色"}
创建集合:
可以使用大括号{}
或set()
构造函数来创建一个空集合,或者使用大括号内包含元素来创建一个包含元素的集合。
empty_set = set() # 创建一个空集合
fruits = {"苹果", "香蕉", "橙子"} # 创建一个包含元素的集合
访问集合元素:
由于集合是无序的,因此不能像列表或元组那样使用索引访问元素。您可以使用in
运算符来检查元素是否存在于集合中。
fruits = {"苹果", "香蕉", "橙子"}
has_apple = "苹果" in fruits # 检查集合中是否包含 "苹果"
集合基本操作:
1. 添加元素:
可以使用add()
方法向集合中添加单个元素,或使用update()
方法添加多个元素(通过可迭代对象)。
fruits = {"苹果", "香蕉", "橙子"}
fruits.add("草莓") # 向集合中添加 "草莓"
fruits.update(["葡萄", "柚子"]) # 向集合中添加多个元素
2. 删除元素:
可以使用remove()
方法删除指定元素,如果元素不存在,会引发 KeyError。如果希望安全删除元素,可以使用discard()
方法,它不会引发异常。
fruits = {"苹果", "香蕉", "橙子"}
fruits.remove("苹果") # 从集合中删除 "苹果"
fruits.discard("葡萄") # 如果存在,删除 "葡萄";否则什么都不做
3. 清空集合:
要清空集合中的所有元素,可以使用 clear()
方法。
fruits = {"苹果", "香蕉", "橙子"}
fruits.clear() # 清空集合
# 现在,fruits 是一个空集合,即 set()
4. 更新集合:
可以使用 update()
方法将一个集合的元素添加到另一个集合中,或者使用 union()
方法获取两个集合的并集。
fruits = {"苹果", "香蕉", "橙子"}
new_fruits = {"草莓", "蓝莓"}
fruits.update(new_fruits) # 将 new_fruits 中的元素添加到 fruits 中
# 现在,fruits 包含 {"苹果", "香蕉", "橙子", "草莓", "蓝莓"}
all_fruits = fruits.union(new_fruits) # 获取 fruits 和 new_fruits 的并集
# all_fruits 包含 {"苹果", "香蕉", "橙子", "草莓", "蓝莓"}
5. 判断元素是否在集合中存在
在Python中,要判断一个元素是否存在于集合中,可以使用in
运算符或not in
运算符。这两种运算符可以用来检查元素是否在集合中存在,返回布尔值(True或False)。
fruits = {"苹果", "香蕉", "橙子"}
# 使用 in 运算符检查元素是否存在
is_apple_in_set = "苹果" in fruits # True,因为 "苹果" 存在于集合中
is_grape_in_set = "葡萄" in fruits # False,因为 "葡萄" 不存在于集合中
# 使用 not in 运算符检查元素是否不存在
is_banana_not_in_set = "香蕉" not in fruits # False,因为 "香蕉" 存在于集合中
is_mango_not_in_set = "芒果" not in fruits # True,因为 "芒果" 不存在于集合中
6. 计算集合元素个数
要计算集合中元素的个数,您可以使用内置函数len()
。这个函数可以用于返回集合中元素的数量。
fruits = {"苹果", "香蕉", "橙子", "草莓", "蓝莓"}
# 使用 len() 函数计算集合中元素的个数
num_fruits = len(fruits)
print("集合中元素的个数是:", num_fruits)
集合高级操作
1. 交集(Intersection):
交集操作返回两个集合中都包含的元素的新集合。
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
intersection = set1.intersection(set2)
# intersection 的值为 {3, 4}
2. 并集(Union):
并集操作返回包含两个集合所有元素的新集合,去除重复元素。
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
union = set1.union(set2)
# union 的值为 {1, 2, 3, 4, 5, 6}
3. 差集(Difference):
差集操作返回一个包含在第一个集合中但不在第二个集合中的元素的新集合。
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
difference = set1.difference(set2)
# difference 的值为 {1, 2}
4. 对称差集(Symmetric Difference):
对称差集操作返回两个集合中的元素,除去两者都包含的元素,形成一个新的集合。
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
symmetric_difference = set1.symmetric_difference(set2)
# symmetric_difference 的值为 {1, 2, 5, 6}
5. 子集(Subset)和超集(Superset):
可以使用issubset()
和issuperset()
方法检查一个集合是否是另一个集合的子集或超集。
set1 = {1, 2, 3}
set2 = {1, 2, 3, 4, 5}
is_subset = set1.issubset(set2) # True,set1 是 set2 的子集
is_superset = set2.issuperset(set1) # True,set2 是 set1 的超集
集合内置方法
以下是Python中常见的集合内置方法的完整列表
方法 | 描述 |
---|---|
add(element) |
向集合添加一个元素。 |
clear() |
删除集合中的所有元素。 |
copy() |
返回集合的浅拷贝(新的集合对象,但元素相同)。 |
difference(*others) |
返回与其他集合的差集(不在其他集合中的元素)。 |
difference_update(*others) |
移除与其他集合的交集(inplace操作)。 |
discard(element) |
移除集合中的指定元素,如果元素不存在则不执行任何操作。 |
intersection(*others) |
返回与其他集合的交集(两个或更多集合的共同元素)。 |
intersection_update(*others) |
保留与其他集合的交集(inplace操作)。 |
isdisjoint(other) |
检查集合是否与另一个集合没有共同的元素。 |
issubset(other) |
检查集合是否是另一个集合的子集。 |
issuperset(other) |
检查集合是否是另一个集合的超集。 |
pop() |
随机删除并返回集合中的一个元素。 |
remove(element) |
移除集合中的指定元素,如果元素不存在则引发 KeyError。 |
symmetric_difference(other) |
返回与其他集合的对称差集(不在两者共同部分的元素)。 |
symmetric_difference_update(other) |
保留与其他集合的对称差集(inplace操作)。 |
union(*others) |
返回与其他集合的并集(包含所有集合的元素,去除重复)。 |
update(*others) |
将与其他集合的并集添加到当前集合中(inplace操作)。 |