python列表组合可能性_查找列表的所有可能子集的所有可能组合

我试图从列表中找到的所有子集的组合,其中每个元素只使用一次。在

为了澄清我的意思,给出一个示例列表:

[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],)]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值