1

最小値(0,0,0,0)と最大値(2,1,3,2)を持つ長さ4のベクトルが与えられたとします。この範囲内で、合計が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 に答える