現在、リストから素数のすべての組み合わせとそのサブセットの積を次のように出力しています。
from operator import mul
from itertools import combinations
primes = [2, 3, 5, 7, 11]
for r in range(1,len(primes)):
for combo in combinations(primes,r+1):
print combo, reduce(mul, combo)
どの出力
(2,) 2
(3,) 3
(5,) 5
(7,) 7
(11,) 11
(2, 3) 6
(2, 5) 10
(2, 7) 14
(2, 11) 22
(3, 5) 15
(3, 7) 21
(3, 11) 33
(5, 7) 35
(5, 11) 55
(7, 11) 77
(2, 3, 5) 30
(2, 3, 7) 42
(2, 3, 11) 66
(2, 5, 7) 70
(2, 5, 11) 110
(2, 7, 11) 154
(3, 5, 7) 105
(3, 5, 11) 165
(3, 7, 11) 231
(5, 7, 11) 385
(2, 3, 5, 7) 210
(2, 3, 5, 11) 330
(2, 3, 7, 11) 462
(2, 5, 7, 11) 770
(3, 5, 7, 11) 1155
(2, 3, 5, 7, 11) 2310
ここで、次のチャンクを見ているとしましょう。
(2, 5, 7) 70
(2, 5, 11) 110
(2, 7, 11) 154
(3, 5, 7) 105
(3, 5, 11) 165
(3, 7, 11) 231
(5, 7, 11) 385
(2, 3, 5, 7) 210
(2, 3, 5, 11) 330
例として、積が 110 未満のすべての組み合わせを反復処理したいと思います。ここでの最初の「エンドポイント」は、積が 110 であるため、(2,5,11) で発生します。
問題は、この時点で中断すると、長さ 3 のすべてのタプルを中断して (2,3,5,7) に移動しようとしていると見なされ、そうでなければ有効な (3,5,7) がスキップされることです。 ) <110 の積を持つ。一方、この時点で単純に続行すると、時間の無駄になることがわかっている大量のタプルを繰り返し処理することになります。(2, 5, 11) が大きすぎることがわかっている場合、(2, 7, 11) も明らかに大きすぎるため、評価する必要はありません。
私の質問が明確かどうかはわかりませんが、出力の順序が私の構造により一致する組み合わせを生成する別の方法はありますか?