重複の可能性:
特定の合計に達する可能性のある数字のすべての組み合わせを見つける
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
どこが間違っていますか?