如何处理可变数量的嵌套for循环?

时间:2014-11-24 21:21:21

标签: python

我有一个字典,我希望找到所有值的总和,乘以增加的因子。 dict大小为2的情况下的可能代码:

# 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

我遇到的问题是dict中元素的数量会有所不同,因此嵌套for的数量也应该改变。是否有更好的方法来编码这样的问题以适应这样一个变量dict?

1 个答案:

答案 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