【发布时间】:2012-04-17 20:01:01
【问题描述】:
目前我正在输出列表中的所有素数组合以及该子集的乘积,如下所示:
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
为了举例,我想遍历乘积
问题是,如果我此时 break,它会认为我正在尝试破坏所有长度为 3 的元组并移动到 (2,3,5,7),从而跳过乘积 继续,我最终会遍历大量元组,我知道这将是浪费时间。如果我知道 (2, 5, 11) 太大,那么 (2, 7, 11) 显然也太大了,我不应该评估它。
我不确定我的问题是否清楚,但是否有另一种方法可以生成输出顺序更符合我的结构的组合?
【问题讨论】:
-
如果你想在任意时间前进,你必须手动生成连击。
-
这就是我害怕的,哈哈
-
这是欧拉计划的问题之一吗? (只是出于好奇。)
标签: python combinations itertools