python - 从列表的元素中生成数字

标签 python algorithm subset-sum

我如何检查是否可以从列表元素创建数字?

例如: 列表=[1,1,3,3,3,3,5,10,23,53]

现在我们可以从 [1,3,5] 或 [3,3,3] 中得到 9 我试过类似的东西:

list=[1,1,3,3,3,3,5,10,23,53]
tmp=[]
sum=0

for i in range(len(list)):
  tmpChange=9
  tmpChange -= list[i]+sum
  if tmpChange == 0:
      break
  elif tmpChange > 0:
      tmp.append(list[i])
      sum += list[i]
      print(tmpChange)
      print(tmp)
  else:
      tmp.pop(i)

最佳答案

解决这个问题的一种简单方法是找到原始列表的所有子集,您可以使用 itertools.combinations 来完成。然后您可以检查子集总和是否等于您的原始值,然后将它们添加到 set

import itertools
l = [1,1,3,3,3,3,5,10,23,53]
total = 9
values = set()
for r in range(1, len(l)):
    for c in itertools.combinations(l, r):
        if sum(c) == total:
            values.add(tuple(c))

结果是

>>> values
{(1, 3, 5), (3, 3, 3)}

作为另一个使用以下数据的例子

l = [1,1,3,3,3,3,4,5,9,10,23,53]

结果是

>>> values
{(4, 5), (3, 3, 3), (1, 1, 3, 4), (1, 3, 5), (9,)}

关于python - 从列表的元素中生成数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43619570/

相关文章:

python - 如何查看网格和单元格 Python 中的内容

algorithm - 与 STL 实现相比,自平衡 BST 的自定义实现可以做什么?

math - 找到可以给你最大总和的数字子集

java - 使用递归将其元素加起来为 n 的子集列表

python - 将我的打印输出成对返回为元组?

python - 基于另外 2 列 python pandas 乘以 df 的 2 个子集

Python - 为 raise exception_class(message, screen, stacktrace) 进行异常处理

algorithm - 为什么不相交集的运行时间是根据操作次数而不是输入大小来计算的?

algorithm - 排序任务分配

algorithm - 线性时间的子集和