Python 集合运算

2025年8月6日 | 阅读 9 分钟

在 Python 中,集合 (set) 是用于存储集合的四种内置数据类型之一,其他三种是列表 (list)、元组 (tuple) 和字典 (dictionary)。

它是一个无序的、包含唯一元素的集合。集合被认为是可变的 (mutable),这意味着我们可以在创建集合后添加或删除元素。

集合的关键特性

  • 可变 (Mutable):在可变数据类型中,我们可以编辑或更改元素。
  • 不可变 (Immutable):在不可变类型中,我们不能更改元素。
  • 无序 (Unordered):集合不维护元素的特定顺序。
  • 唯一元素 (Unique elements):元素完全不同,意味着没有重复的元素。
  • 可哈希元素 (Hashable elements):每个元素都必须具有一个在其整个生命周期内保持不变的 哈希值

如何在 Python 中创建集合?

Python 中,我们可以使用内置的 set() 函数 创建集合。我们也可以通过将元素放在花括号 {} 中来定义集合。让我们通过一个例子来理解这一点。

示例

输出

{'TpointTech', (1, 2, 3), 14}
{'n', 't', 'i', 'T', 'o', 'c', 'p', 'e', 'h'}

Python 集合示例

示例

输出

{25, 5, 15}
<class 'set'>

使用 Python 集合进行类型转换

类型转换 (Typecasting) 是指将 数据类型 或数据结构转换为另一种形式的过程。

让我们看一个将列表转换为集合的例子。

示例

输出

{'w', 'x', 'z'}
After adding the letter 'z'
{'w', 'x', 'y', 'z'}

使用 Python 集合检查唯一性和不可变性

Python 集合不能包含重复值。我们不能直接修改单个元素,但是仍然可以从集合中添加或删除元素。

让我们快速看一个例子。

示例

输出

Set with duplicates removed: {10, 20, 30}

Python set() 运算

Python Set() 运算包含我们都听说过的数学运算符,例如:

  • 集合并集 (Set Union)
  • 集合交集 (Set Intersection)
  • 集合差集 (Set Difference)
  • 集合对称差集 (Set Symmetric Difference)

现在,我们将通过示例理解所有集合运算。

1. 集合并集 (Set Union)

集合并集会将所有集合的元素合并在一起,但不包含重复元素。要查找集合的并集,我们可以使用 union() 方法或 "|" 运算符。

让我们通过一个例子来理解集合并集运算。

示例 1:使用 union() 方法

示例

输出

{'T', 'point', 'Tech'}

说明

在上面,我们使用 union() 函数来查找集合的并集,或者说合并两个集合而不包含相同元素。

示例 2:使用 "|" 运算符

示例

输出

{'T', 'Tech', 'point'}

2. 集合交集 (Set Intersection)

集合交集找出并提取集合中的共同元素。要找出两个集合中的共同元素,我们可以使用 intersection() 方法和 & 运算符。

让我们通过一个例子来理解集合交集运算。

示例 1:使用 intersection() 方法

示例

输出

{'point'}

示例 2:使用 "&" 运算符

让我们看看如何使用 & 运算符进行交集运算。

示例

输出

{'point'}

说明

在上面两个示例中,我们使用 intersection() 方法和 " & " 运算符来识别两个集合中的共同元素,这里两个集合的共同元素是 "point"。

3. 集合差集 (Set Difference)

集合差集比较两个集合,并移除第一个集合中不存在的元素。有两种方法可以找到集合差集:第一种是 difference() 函数,另一种是 " - " 运算符。

让我们通过一个例子来理解这两种集合差集的方法。

示例 1:使用 difference() 函数

示例

输出

{'T', 'point'}

示例 2:使用 " - "

示例

输出

{'T', 'point'}

说明

在上面的示例中,difference() 方法和 " - " 运算符用于查找集合差集。此运算找出存在于第一个集合但不存在于第二个集合中的元素。

4. 集合对称差集 (Set Symmetric Difference)

在对称差集中,我们可以使用 symmetric_difference() 方法或

" ^ 运算符在 Python 中移除两个集合中的共同元素。

让我们通过一个例子来理解集合对称差集。

示例 1:使用 symmetric_difference() 函数

示例

输出

{'Ltd', 'point', 'T', 'Pvt'}

示例 2:使用 " ^  " 运算符

示例

输出

{'Pvt', 'point', 'Ltd', 'T'}

如何通过运算修改集合

我们可以使用一些语法来修改集合并更新变量。有各种方法可以修改集合,例如,用于并集操作的 update() 函数,用于交集的 '&=',用于差集的 '-=',以及用于对称差集的 '^='。除了并集操作,我们可以在每个语法前加上 = 符号来修改集合。

让我们看一些示例来理解如何修改集合。

1. 使用并集修改集合

update() 函数允许我们通过添加另一个集合的所有元素来修改集合,从而就地执行并集运算。

语法

让我们看一个使用 update() 函数的例子。

示例

输出

{'point', 'Ltd', 'Tech', 'Pvt', 'T'}

注意:输出的元素可能会随机互换。 

2. 使用交集运算修改集合

我们可以使用 " &= " 语法通过交集运算来修改集合。

语法

让我们通过一个使用 " &= " 语法的例子来看看。

示例

输出

{'Tech'}

3. 使用差集运算修改集合

我们可以使用 " -= " 语法通过差集运算来修改集合。

语法

让我们看一个使用 "-=" 语法的例子。

示例

输出

{'T', 'point'}
OR
{'point', 'T'}

4. 使用对称差集运算修改集合

我们可以使用 " ^= " 语法通过差集运算来修改集合。

语法

让我们在示例中使用 "-=" 语法。

示例

输出

{'point', 'Ltd', 'T', 'Pvt'}

Python 中的其他集合运算

Python 中还有一些其他的集合运算,让我们来看其中一些。

1. 判断一个集合是否为另一个集合的子集

我们可以使用 issubset() 函数和 <= 运算符来检查集合 A 是否为集合 B 的子集。基本上,这意味着集合 A 的所有元素都必须存在于集合 B 中。

让我们看一个例子

示例

输出

False
True

1. 判断一个集合是否为另一个集合的超集

我们可以使用 issuperset() 函数或 >= 运算符来确定一个集合是否为另一个集合的超集。这表明第二个集合的所有元素都必须包含在第一个集合中。

让我们通过一个例子来看看这个运算。

示例

输出

True
False

2. 判断两个集合是否没有共同元素

isdisjoint() 方法检查两个集合是否没有共同元素。如果它们完全不相交,则返回 True。

语法

让我们通过一个例子来看。

示例

输出

True

Python 中的 frozenset (冻结集合)

Python 中的 frozenset (冻结集合) 允许我们将集合用作 字典的键,而普通集合因为是可变的且不可哈希而无法做到这一点。

顾名思义,"冻结 (Frozen)" 意味着我们不能添加、删除或修改元素。frozenset 是不可变的且可哈希的。

结论

Python set() 运算使用数学集合运算,如 并集、交集、差集和对称差集。我们通过大量示例理解了这些。

我们还介绍了如何使用上述相同的数学运算,但使用不同的函数和运算符符号来修改集合。Python 中还有其他集合运算,用于检查子集、超集和无共同元素 (不相交) 的情况。

常见问题解答

1. Python 中的基本集合运算有哪些?

Python 包含数学集合运算,如并集、交集、差集和对称差集。

2. 如何执行两个集合的并集运算?

我们可以使用 .union() 函数 和 first_set | second_set 运算符来查找两个集合的并集。

3. 集合在 Python 中是可变的吗?

是的,集合在 Python 中是可变的,这意味着我们可以在创建后添加、删除或修改其元素。

4. 如何检查一个集合是否为另一个集合的子集?

我们可以使用 issubset() 函数和 <= 运算符来检查一个集合是否为另一个集合的子集。

5. 如何判断一个集合是否为另一个集合的超集?

我们可以使用 issuperset() 函数和 >= 运算符来检查一个集合是否为另一个集合的子集。

6. 集合可以包含重复元素吗?

不可以,集合不能包含重复元素,因为集合中的所有元素都是唯一的。

7. 集合可以包含不同的数据类型吗?

是的,集合可以包含不同类型的不可变数据类型,如整数、字符串、元组等。

8. 集合可以排序吗?

集合是无序的,要对它们进行排序,我们必须先使用 sorted(set) 将它们转换为列表。