1

假设给定一个长度为 4 的向量,其中包含最小值 (0,0,0,0) 和最大值 (2,1,3,2)。我想找到这个范围内的所有整数向量,例如,5。

以下代码实现了这一点:

maxvalues = (2,1,3,2)
k = 5
t = []
for x1 in range(maxvalues[0]+1):
    for x2 in range(maxvalues[1]+1):
        for x3 in range(maxvalues[2]+1):
             for x4 in range(maxvalues[3]+1):
                  if x1+x2+x3+x4 is k:
                      t.append((x1,x2,x3,x4))

但是,此代码不能很好地推广到更大的向量,并且似乎效率低下。有没有人有一个很好的方法来概括这一点?

编辑:小错误,忘记了if语句

4

1 回答 1

2

利用itertools.product

from itertools import product

for x1, x2, x3, x4 in product(*(range(i+1) for i in maxvalues)):
    t.append((x1, x2, x3, x4))

product尽管直接将对象转换为列表要好得多(也更通用) 。

t = list(product(*(range(i+1) for i in maxvalues)))

包含if声明后,它看起来像这样。

t = [i for i in product(*(range(i+1) for i in maxvalues)) if sum(i) == k]
于 2013-02-25T10:54:56.810 回答