Python 中的子集

2024 年 8 月 29 日 | 4 分钟阅读

子集 是属于另一个集合(称为“超集”)的元素集合。在 Python 中,子集可以使用列表、元组 或任何其他可迭代对象来表示。

要检查一个子集是否包含在超集中,可以使用集合对象的issubset 方法。

示例

输出

True

或者,您可以使用<= 运算符来检查一个集合是否是另一个集合的子集。

示例

输出

True

除了检查子集是否包含在超集中,您还可以使用 intersection 方法或& 运算符查找两个集合的交集,并使用 union 方法或| 运算符查找两个集合的并集。

示例

让我们看一个例子来说明 Python 中子集和集合运算的概念。

输出

False
{2, 3}
{2, 3}
{1, 2, 3, 4}
{1, 2, 3, 4}

在此示例中,我们定义了两个集合A 和 B,并使用issubset 方法检查A 是否是B子集。结果是False,因为集合A 中的所有元素并不都存在于集合B 中。

接下来,我们使用 intersection 方法或& 运算符查找A 和 B交集。结果是集合{2, 3},它表示A 和 B 中共同的元素。

最后,我们使用 union 方法或| 运算符查找A 和 B并集。结果是集合{1, 2, 3, 4},它表示存在于A 或 B 中的所有元素的完整集合。

示例

用于查找给定大小的特定集合/列表的所有子集的 Python 代码

您可以使用 Python 中的itertools 库查找给定大小的集合的子集。以下是如何使用itertools 中的 combinations 函数来查找给定集合 s 和大小 k 的所有子集的示例。

输出

[(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]

‘combinations’函数返回一个迭代器,该迭代器生成集合 s 中大小为k 的所有可能元素组合。在此示例中,大小为 2 的子集是(1, 2), (1, 3), (1, 4), (2, 3), (2, 4) 和 (3, 4)

示例

您可以使用 Python 中的map 函数itertools.combinations 函数应用于集合的每个元素。

输出

[(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4), (1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4), (1, 2, 3, 4)]

示例

不使用任何内置函数即可生成给定集合 s 的所有子集的 Python 实现

输出

[[], [1], [2], [2, 1], [3], [3, 1], [3, 2], [3, 2, 1], [4], [4, 1], [4, 2], [4, 2, 1], [4, 3], [4, 3, 1], [4, 3, 2], [4, 3, 2, 1]]

此代码使用递归函数 subsets,该函数接受s 的列表作为输入,并返回s 的所有可能子集的列表。递归的基本情况是当输入列表 s 为空时,此时函数返回包含空列表的列表。在每次递归调用中,函数首先使用递归调用查找s前 n-1 个元素的所有子集,然后通过将元素添加到前 n-1 个元素的每个子集中来生成s 的最后一个nth 元素的所有子集。最终结果是通过连接两个子集列表获得的。