2012-04-17 52 views
0

我使用任意維度的多維結構。我的xrange迭代Python列表,與代表一個多維陣列的索引的每個迭代:多維索引(任意維數)的列表表示的高效迭代

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
>>> 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

對於itertools爲+1。有完全相同的方法,但發佈太慢 – ch3ka 2012-04-17 16:41:37

+1

優秀的答案! – Gilead 2012-04-17 16:49:47