python - 如何从子集列表中过滤出唯一的组合

标签 python arrays list subset

我试图想出一个脚本来实现 Subset sum Prob ,在 this post 第一个脚本的帮助下。所以,现在运行我的脚本,我得到这个:

maci:python sant$ ./subsetSum.py -n3,4,5,6,7,8,9,3,4,5 -t12
[3, 4, 5] => 12
[3, 4, 5] => 12
[3, 5, 4] => 12
[3, 6, 3] => 12
[3, 9] => 12
[3, 4, 5] => 12
[4, 5, 3] => 12
[4, 8] => 12
[4, 3, 5] => 12
[5, 7] => 12
[5, 3, 4] => 12
[7, 5] => 12
[8, 4] => 12
[9, 3] => 12
[3, 4, 5] => 12

效果很好。但如何仅过滤掉唯一的子集呢?结果中,1、2、15 完全相同,还有 6 个,是[3,4,5]的组合。如何只打印一份而不是全部?干杯!!

PS。我知道 Q 可能没有反射(reflect)我真正想要的,所以请随意改进它。

最佳答案

不必在列表中多次添加数字,只需添加(数字,多重性)的元组 所以你的输入将变成 [(3, 2), (4, 2), (5, 2), (6, 1), (7, 1), (8, 1), (9, 1) ]

这样可以轻松创建没有重复的子集。你可以这样做:

for i in n[1]:
    subset_sum_recursive(remaining, target, partial + i * [n[0]])

或者,不仅保留“部分”列表,还保留“废弃”列表可能会更容易。然后你可以检查

if(n not in discarded)
    subset_sum_recursive(remaining,target,partial + [n]) 

关于python - 如何从子集列表中过滤出唯一的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15838399/

相关文章:

python - wxPython 导航面板(如 Finder (Mac OS X)、Nautilus (Ubuntu)、Explorer (Windows 7))

python - 重命名Python中的符号链接(symbolic link)

python - python的开放高度api

python - Python 中的最内层列表

css - 如何强制嵌套列表项与父列表项的宽度相同?

Python Multiprocessing.Pool 工作人员在使用 pool.map 时挂起

c - 单链表数组不会删除节点

Ruby-基于索引中的字符串对数组进行排序

javascript - 按样式按顺序按动态提供的对象属性列表对对象数组进行排序

python - 在python中递归展平嵌套列表