2012-04-17 65 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