Python:查找所有包含约束元素的元组,这些元素加起来就是一个常量

2024-04-26 00:05:48 发布

您现在位置:Python中文网/ 问答频道 /正文

假设给我一个长度为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语句


Tags: 代码in编辑forifisrange整数
1条回答
网友
1楼 · 发布于 2024-04-26 00:05:48

使用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对象直接转换为列表会更好(也更通用)。在

^{pr2}$

如果包含if语句,它将如下所示。在

t = [i for i in product(*(range(i+1) for i in maxvalues)) if sum(i) == k]

相关问题 更多 >