可能重复:
找到所有可能的数字组合以达到给定的总和
我不想使用 Itertools,因为它以我不想要且无法使用的顺序输出东西(我需要能够评估组合生成器试图输出的内容,以决定我是否要继续下降那个分支)。
例如,假设我有一个列表 [1,2,3,4,5] 并且我想输出具有完整产品 <=12 的组合,而不会浪费迭代。如果我生成,比如说,[1,2,3],这很好,因为 1*2*3=6。但是如果我尝试 [1,2,3,4] 那么 1*2*3*4=24,这大于 12,因此我什至不应该费心研究 [1,2,3,5]或 [1,2,4,5] 等等。
当前尝试:
from operator import mul
mylist=[1,2,3,4,5]
limit=12
def productOK(mylist): #but this can be any conditional, theoretically
if reduce(mul, mylist) > limit:
return False
return True
def generateValidSubsets(mylist):
for r in range(1,len(mylist)+1):
start=mylist[:r]
if productOK(start)==False: break
#not sure how to recombine in the right order otherwise
yield start
for combo in generateValidSubsets(mylist):
print combo
我哪里错了?