2012-04-17 9 views
0

私は任意の次元の多次元構造を扱います。私は、次のナイーブ再帰コードを使用(任意の次元の)多次元インデックスのリスト表現上の効率的な反復

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

すべての可能な値を生成するために、

indices = [ i, j, k ] 

:私は、多次元配列のインデックスを表す各イテレータと、xrangeイテレータのPythonのリストを持っています。

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) 

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

答えて

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) 
+1

1 for itertools。まったく同じアプローチだったが、遅すぎる投稿 – ch3ka

+1

優れた答え! – Gilead