我希望我的程序能够找到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])
我可以通过更改我创建的变量来更改总和和值范围的值,但如何使用变量指定嵌套循环的数量? 谢谢
答案 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)