2016-12-06 173 views
1

我希望我的程序能够找到x个整数的组合,并将这些组合的值与一个给定数相加的范围内的值相匹配。通过变量嵌套的循环数

例如:我想通过编码来查找可以具有求和等于5.我可以做到这一点0和2,并且之间的值的整数3的组合:

possibilities = [] 
total = 5 
valueRange = 3 
for num1 in xrange(valueRange): 
    for num2 in xrange(valueRange): 
     for num3 in xrange(valueRange): 
      if num1 + num2 + num3 == total: 
       possibilities.append([num1, num2, num3]) 

我可以改变值通过改变我创建的变量的总和和范围值,但是如何使用变量指定嵌套循环的数量? 谢谢

+2

也许这有助于(递归):http://stackoverflow.com/questions/7186518/function-with-varying-number-of-for-loops-python – Martinbaste

回答

2

itertools.product()功能应该有所帮助:

>>> [values for values in product(range(3), repeat=3) if sum(values) == 5] 
[(1, 2, 2), (2, 1, 2), (2, 2, 1)] 

见此,答案包含了相同的答案的字谜,您可以通过使用itertools.combinations_with_replacement()进一步降低工作:

>>> # 4 digits in [0, 1, 2, 3, 4] summing to 6 
>>> for values in combinations_with_replacement(range(5), 4): 
     if sum(values) == 6: 
      print(values) 

(0, 0, 2, 4) 
(0, 0, 3, 3) 
(0, 1, 1, 4) 
(0, 1, 2, 3) 
(0, 2, 2, 2) 
(1, 1, 1, 3) 
(1, 1, 2, 2) 
0

使用代替itertools.product

for t in itertools.product(xrange(valueRange), n): 
    if sum(t) == total: 
     possibilities.append(t)