2016-12-06 9 views
1

私のプログラムは、xの整数の組み合わせが、合計された数値が等しい数の値を持つようにしたい。例えば変数によるネストされたループの数

:私は値を変更することができ

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]) 

:私はコーディングすることによってこれを行うことができ、私は0と2の間の値を持つことができる3つの整数の組み合わせを見つけたい、それが等しい5を合算私が作成した変数を変更することで、総和と範囲の値のうちの1つを返します。変数を使用してネストされたループの量を指定するにはどうすればよいですか? はあなたが

+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) 
関連する問題