按变量的嵌套循环数

时间:2016-12-06 16:12:29

标签: python loops nested-loops

我希望我的程序能够找到x个整数的组合,其值在一个等于给定数字的范围内。

例如:我想找到3个整数的组合,它们的值可以在0到2之间,总和等于5.我可以通过编码来实现:

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

答案 0 :(得分: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)

答案 1 :(得分:0)

改为使用itertools.product

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