目前,我正在输出列表中的所有素数组合以及该子集的乘积,如下所示:
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 的所有组合。这里的第一个“端点”出现在 (2,5,11),因为乘积是 110。
问题是,如果我此时中断,它会认为我正在尝试中断所有长度为 3 的元组并继续前进到 (2,3,5,7),从而跳过其他有效的 (3,5,7 ) 产品 <110。另一方面,如果我只是在这一点上继续,我最终会遍历大量我知道会浪费时间的元组。如果我知道 (2, 5, 11) 太大,那么 (2, 7, 11) 显然也会太大,我不应该评估它。
我不确定我的问题是否清楚,但是是否有另一种方法可以生成输出顺序更符合我的结构的组合?