0

任意次元の多次元構造を扱っています。Python のxrange反復子リストがあり、各反復子は多次元配列のインデックスを表します。

indices = [ i, j, k ]

どこ

i = xrange(1,3)
j = xrange(3,5)
k = xrange(5,7)

すべての可能な値を生成するために、次の単純な再帰コードを使用します。

def travtree(index,depth):
    "Recursion through index list"
    if depth >= len(indices):
        # Stopping Condition
        print index
    else:
        # Recursion
        currindexrange = indices[depth]
        for currindex in xrange(len(currindexrange)):
            newindex = list(index) # list copy
            newindex.append(currindexrange[currindex])
            travtree(newindex,depth+1)

travtree([],0)

これは問題なく動作しますが、これを行うためのより効率的な Pythonic の方法はあるのでしょうか? モジュールを調べてみましたitertoolsが、何も飛び出しません。

4

1 に答える 1

4
>>> from itertools import product
>>> i = xrange(1,3)
>>> j = xrange(3,5)
>>> k = xrange(5,7)
>>> indices = [ i, j, k ]
>>> for item in product(*indices):
        print item


(1, 3, 5)
(1, 3, 6)
(1, 4, 5)
(1, 4, 6)
(2, 3, 5)
(2, 3, 6)
(2, 4, 5)
(2, 4, 6)
于 2012-04-17T16:36:13.240 に答える