2012-04-17 2 views
0

임의의 차원의 다차원 구조로 작업합니다. 내가 다차원 배열의 인덱스를 나타내는 각각의 반복자로, 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) 

괜찮 으면 좋겠지 만 궁금한 점이 있습니다. 더 효율적이고 파이썬 적으로 이것을 할 수 있습니까? 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