【发布时间】:2013-08-11 20:49:54
【问题描述】:
令 S(w) 是一组单词。我想生成所有可能的子集 s 的 n 组合,以便这些子集的并集始终等于 S(w)。
所以你有一个集合 (a, b, c, d, e) 并且你不想要所有的 3 组合:
((a, b, c), (d), (e))
((a, b), (c, d), (e))
((a), (b, c, d), (e))
((a), (b, c), (d, e))
等等……
对于每个组合,您有 3 个集合,这些集合的并集是原始集合。没有空集,没有缺失元素。
必须有一种方法可以使用 itertools.combination + collection.Counter 但我什至无法从某个地方开始...... 有人可以帮忙吗?
卢克
编辑:我需要捕捉所有可能的组合,包括:
((a, e), (b, d) (c))
等等……
【问题讨论】:
-
Here 它说你可以使用长度 r 来指定你想要 r 大小的组合。
-
是的,但它提供了单个元素的组合。我需要包含我所有元素的集合。
-
澄清一下:在 Roman Pekar 的解决方案中,最后一个结果是
(('e', 'd', 'c'), ('b',), ('a',)),倒数第二个结果是(('e', 'd', 'c'), ('a',), ('b',))。那是你想要的吗?如果是,也许您应该将标题更改为“排列”而不是“组合”。
标签: python combinations subset multiset powerset