生成子集集和未使用的元素

Posted

技术标签:

【中文标题】生成子集集和未使用的元素【英文标题】:Generate sets of subsets plus unused elements 【发布时间】:2021-02-21 21:57:54 【问题描述】:

我想要一个 python 程序,它接受一个整数列表并返回一个包含子集的元组列表的列表以及包含第一个子集中未使用的其余值的子集,基本上得到了所有组合的可能性列表中的值。

[1,2,3,4]

应该返回

[[(1,), (2,), (3,), (4,)], [(1,), (2,3,), (4,)], [(1,), (2,) (3,4,)], [(1,), (2,4,), (3,)],[(1,), (2,3,4,)], [(1,2,), (3,), (4,)], [(1,2,), (3,4)]...and so on]

【问题讨论】:

看看这个帖子的答案:***.com/questions/464864/… 【参考方案1】:

是的。使用库more_itertools,这非常容易。您可以使用 for 循环下方写入您的 tuple 级别输出并丢弃不需要的 结果。

import more_itertools

s1 = set([1,2,3,4])
subsubsets = more_itertools.set_partitions(s1)
print(*subsubsets)
subsubsets = more_itertools.set_partitions(s1)
for l in subsubsets:
    if l1 != sum(len(k) for k in l):
        print(f"l non-compliant")
        break

输出(添加额外的换行符)

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

【讨论】:

以上是关于生成子集集和未使用的元素的主要内容,如果未能解决你的问题,请参考以下文章

如何使用堆栈和队列非递归地生成所有可能的n元素集子集?

子集生成

如何在Java中递归地从N元素集中生成所有k元素子集

构造增量法生成子集

子集生成

子集生成与字典序