我试图从列表中找到的所有子集的组合,其中每个元素只使用一次。在
为了澄清我的意思,给出一个示例列表:
[1,2,3,4]
我可以生成以下组合:
[(1),(2),(3),(1,2),(1,3),(2,3),(1,2,3)](这应该是详尽的!)在
然后我可以生成这些组合的组合:
[[(1),(2),(3)],[(1,2),(3)],[(1,3),(2)],[(1),(2,3)],[(1,2,3)],。。。(对于许多人)]
主要的一点是,我只允许在给定的组合中使用每个元素一次。所以我不能:
[(1),(1,2,3)],因为元素1被使用了两次。在
我一直在尝试对small n(n<;10)使用python,但一直失败。在这一点上,它甚至不是一个运行时问题(小n!),但我甚至没有找到所有的可能性!在
我不确定我的问题是否表达得很好,所以请提出明确的问题。另外,如果有一些关键词可以帮助我澄清问题,一定要说出来!我对Python方法很感兴趣,但我愿意接受任何数学方法来帮助我做到这一点。运行时是一个我希望稍后解决的问题!在
谢谢!在
编辑1:查看这个问题的另一种方式是关于子集和问题,但注意事项1:不仅要找到所有可能的子集,而且要找到所有子集组合的集合,这样就使用了原始列表中最多的元素,其中每个单独的子集和为0(或k)。在
我的目标是遍历所有答案,然后根据最终未使用的元素的数量对其进行评分,然后选出一组“最佳”的子集
编辑2:接受答案,但修改为接受用户创建的列表
myList=['a'、'b'、'c'、'd']def partitions(myList):
if not myList:
yield []
else:
for partial_partition in partitions(myList[:-1]):
for i in range(len(partial_partition)):
copy_partition = partial_partition[:]
copy_partition[i] += (myList[-1],)
yield copy_partition
yield partial_partition + [(myList[-1],)]