Vanson's Eternal Blog

Python中的Set集合常见和高级用法

Python set.png
Published on
/5 mins read/---

无序的、不重复的数据结构,非常适合用于成员关系测试、消除重复项以及集合运算(如并集、交集、差集等)。

创建集合

可以使用花括号 或 set() 构造函数来创建集合。

 
# 使用花括号创建集合
my_set = {1, 2, 3, 4, 5}
print(my_set)  # 输出: {1, 2, 3, 4, 5}
 
# 使用 set() 构造函数创建集合
another_set = set([1, 2, 3, 4, 5])
print(another_set)  # 输出: {1, 2, 3, 4, 5}
 

添加元素

可以使用 add() 方法向集合中添加元素。

 
my_set = {1, 2, 3}
my_set.add(4)
print(my_set)  # 输出: {1, 2, 3, 4}
 

删除元素

可以使用 remove()、discard() 和 pop() 方法删除元素。

 
my_set = {1, 2, 3, 4, 5}
 
# 使用 remove() 删除指定元素
my_set.remove(3)
print(my_set)  # 输出: {1, 2, 4, 5}
 
# 使用 discard() 删除指定元素(不会抛出错误)
my_set.discard(6)  # 不会报错
print(my_set)  # 输出: {1, 2, 4, 5}
 
# 使用 pop() 删除并返回任意一个元素
popped_element = my_set.pop()
print(popped_element)  # 输出: 1(或集合中的任意一个元素)
print(my_set)  # 输出: {2, 4, 5}
 

集合运算

集合支持并集、交集、差集和对称差集等运算。

 
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
 
# 并集
print(set1.union(set2))  # 输出: {1, 2, 3, 4, 5, 6}
print(set1 | set2)       # 输出: {1, 2, 3, 4, 5, 6}
 
# 交集
print(set1.intersection(set2))  # 输出: {3, 4}
print(set1 & set2)              # 输出: {3, 4}
 
# 差集
print(set1.difference(set2))  # 输出: {1, 2}
print(set1 - set2)            # 输出: {1, 2}
 
# 对称差集
print(set1.symmetric_difference(set2))  # 输出: {1, 2, 5, 6}
print(set1 ^ set2)                       # 输出: {1, 2, 5, 6}
 

检查子集和超集

可以使用 issubset() 和 issuperset() 方法检查子集和超集关系。

 
set1 = {1, 2, 3}
set2 = {1, 2, 3, 4, 5}
 
print(set1.issubset(set2))  # 输出: True
print(set2.issuperset(set1))  # 输出: True
 

集合的长度

可以使用 len() 函数获取集合的长度。

 
my_set = {1, 2, 3, 4, 5}
print(len(my_set))  # 输出: 5
 

成员检查

可以使用 in 操作符检查集合中是否存在某个元素。

 
my_set = {1, 2, 3, 4, 5}
print(3 in my_set)  # 输出: True
print(6 in my_set)  # 输出: False
 

集合推导式

集合推导式类似于列表推导式,用于创建集合。

 
# 使用集合推导式创建集合
squared = {x * x for x in range(10)}
print(squared)  # 输出: {0, 1, 4, 9, 16, 25, 36, 49, 64, 81}
 

集合的不可变版本(frozenset)

frozenset 是一个不可变的集合,可以作为字典的键。

 
# 创建一个 frozenset
frozen = frozenset([1, 2, 3, 4, 5])
print(frozen)  # 输出: frozenset({1, 2, 3, 4, 5})
 
# 使用 frozenset 作为字典的键
my_dict = {frozen: "frozen set"}
print(my_dict)  # 输出: {frozenset({1, 2, 3, 4, 5}): 'frozen set'}
 

集合的更新操作

可以使用

  • update()
  • intersection_update()
  • difference_update()
  • symmetric_difference_update() 方法更新集合。
 
set1 = {1, 2, 3}
set2 = {3, 4, 5}
 
# 更新集合为并集
set1.update(set2)
print(set1)  # 输出: {1, 2, 3, 4, 5}
 
# 更新集合为交集
set1.intersection_update(set2)
print(set1)  # 输出: {3, 4, 5}
 
# 更新集合为差集
set1.difference_update(set2)
print(set1)  # 输出: {1, 2}
 
# 更新集合为对称差集
set1.symmetric_difference_update(set2)
print(set1)  # 输出: {3, 4, 5}
 

集合的清空

可以使用 clear() 方法清空集合。

 
my_set = {1, 2, 3, 4, 5}
my_set.clear()
print(my_set)  # 输出: set()
 

集合的复制

可以使用 copy() 方法复制集合。

 
my_set = {1, 2, 3, 4, 5}
copied_set = my_set.copy()
print(copied_set)  # 输出: {1, 2, 3, 4, 5}
 

集合的 issubset() 和 issuperset()

可以使用 issubset() 和 issuperset() 方法检查子集和超集关系。

 
set1 = {1, 2, 3}
set2 = {1, 2, 3, 4, 5}
 
print(set1.issubset(set2))  # 输出: True
print(set2.issuperset(set1))  # 输出: True
 

集合的 isdisjoint()

可以使用 isdisjoint() 方法检查两个集合是否没有交集。

 
set1 = {1, 2, 3}
set2 = {4, 5, 6}
set3 = {3, 4, 5}
 
print(set1.isdisjoint(set2))  # 输出: True
print(set1.isdisjoint(set3))  # 输出: False