【发布时间】:2018-11-24 00:32:46
【问题描述】:
我有一个数字列表。现在如果我设置一个固定值V,python是否可以将列表分成几组,使得每组的总和不小于V(尽可能多地获得这些组)?
例如:如果列表是 [1,2,3,4,5] 并且 V 是 6,那么结果应该是 [[1,5],[2,3,4]]。分组意味着您不能多次使用相同的原始项目。
每个子列表可以包含多少个项目没有限制,并且数字也不是按顺序排列的(可以是一些随机数)。有人可以帮我吗?到目前为止,我的解决方案是总结所有组合并比较总和。但我很确定应该有更有效的解决方案。谢谢!
我的解决方案:我有点先使用它,然后在我的脑海中完成其余的工作,所以它不值得进一步开发。
import itertools
import math
stuff = list(range(10))
v = 6
for L in range(0, len(stuff)+1):
for subset in itertools.combinations(stuff, L):
if math.fsum(subset) > v:
print(subset,math.fsum(subset))
【问题讨论】:
-
你能把你的解决方案显示为代码吗?
-
@RoryDaulton 是的,我只是注意到了这一点。我改变了我的描述。谢谢!
-
但是,根据你的描述,这3个不应该是分开的
-
@user8408080 你是对的