2014-11-24 107 views
0

我有一個詞典,我希望找到所有價值總和的組合,並乘以一個遞增的因子。的情況下的可能的代碼,其中所述字典的大小爲2:如何處理可變數量的嵌套for循環?

# data and n come from elsewhere 
data = {'a': 1, 'b': 2} 
n = 3 

for x in xrange(0, n): 
    for y in xrange(0, n): 
     print("{0} * {1} + {2} * {3} = {4}".format(x, data['a'], y, data['b'], x * data['a'] + y * data['b'])) 

其給出

0 * 1 + 0 * 2 = 0 
0 * 1 + 1 * 2 = 2 
0 * 1 + 2 * 2 = 4 
1 * 1 + 0 * 2 = 1 
(...) 
2 * 1 + 2 * 2 = 6 

我的問題是,在字典元件的數量會有所不同,因此,數嵌套0​​也應該改變。有沒有更好的方法來編寫這樣的問題,以適應這樣一個變量字典?

回答

2

您可以在笛卡爾積

from itertools import product 
for x, y in product(range(n), repeat=2): 
    ... 

這本身並不是太大的用處,你還是硬編碼在有2個變量帶有單環取代你的嵌套循環。但它引導我們在下一點 - itertools.product隨着迭代而產生元組

from itertools import product 
num_loops = 5 # len(data) in your case 
for item in product(range(n), repeat=num_loops): 
    ... # item is a 5-tuple