首页  >  文章  >  后端开发  >  如何在 Python 中将一个集合划分为其所有可能的子集?

如何在 Python 中将一个集合划分为其所有可能的子集?

DDD
DDD原创
2024-11-07 16:43:03817浏览

How Can You Partition a Set Into All Its Possible Subsets in Python?

Python 中的分区集

当前的任务是将给定的元素集分区为所有可能的子集。例如,对集合 [1, 2, 3] 进行分区会产生以下子集:

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

递归解决方案

解决此问题的一种方法是递归。给定一个包含 n-1 个元素的分区,我们可以通过将第 n 个元素包含在现有子集中之一或创建一个仅包含第 n 个元素的新单例子集来扩展它以创建 n 个元素的分区。

这种递归算法有效地划分输入集,同时避免重复输出和对外部库的不必要依赖:

<code class="python">def partition(collection):
    if len(collection) == 1:
        yield [ collection ]
        return

    first = collection[0]
    for smaller in partition(collection[1:]):
        # insert `first` in each of the subpartition's subsets
        for n, subset in enumerate(smaller):
            yield smaller[:n] + [[ first ] + subset]  + smaller[n+1:]
        # put `first` in its own subset 
        yield [ [ first ] ] + smaller

something = list(range(1,5))

for n, p in enumerate(partition(something), 1):
    print(n, sorted(p))</code>

以上是如何在 Python 中将一个集合划分为其所有可能的子集?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn