Vanson's Eternal Blog

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

Python set.png
Published on
/6 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
 

xx

 
 

xx

 
 

xx

 
 

xx

 
 

xx

 
 

xx

 
 

xx

 
 

xx

 
 

xx

 
 

xx

 
 

xx

 
 

xx

 
 

xx

 
 

xx

 
 

xx

 
 

xx

 
 

xx

 
 

xx

 
 

xx

 
 

xx

 
 

xx

 
 

xx

 
 

xx

 
 

xx

 
 

xx

 
 

xx

 
 

xx

 
 

xx

 
 

xx

 
 

xx

 
 

xx

 
 

xx

 
 

xx

 
 

xx