2014-11-26 2 views
0

itertools 파이썬 라이브러리의 product 메서드를 사용하여 목록의 항목의 모든 순열을 계산합니다. 예를 들어 :itertools.product의 각 반복과 상호 작용

>> elems = [[1,2],[4,5],[7,8]] 
>> permutations = list(itertools.product(*elems)) 
>> print permutations 
# this prints [(1, 4, 7), (1, 4, 8), (1, 5, 7), (1, 5, 8), (2, 4, 7), (2, 4, 8), (2, 5, 7), (2, 5, 8)] 

내가 계산으로, 오히려 한 번에 순열의 전체 집합을 반환하는 것보다 각 순열을 확인할 수 있습니까? 현재 직면하고있는 문제는 너무 많은 순열이 생성되기 때문에 스크립트를 실행하는 동안 Python Memory Error을 실행한다는 것입니다. 나는 단지 하나의 순열만을 염려한다. 각 순열이 생성 될 때마다 확인할 수 있다면 모든 가능한 순열을 저장하는 대신 하나의 값만 저장할 수 있습니다. 가능한가요, 그렇다면 어떻게 구현할 것인가?

답변

2

는 한 번에 루프, 하나의에서 그것을 할 만 할 수

for a_perm in itertools.product(*elems): 
    print(a_perm) 

itertools.product() 당신이 한 번에 하나 개의 항목을 반복 할 수있는 반복자 제공합니다.

+0

각 순열의 요소를 합산하려고한다고 가정하면 생성기에서이를 처리 할 수도 있습니다. (itertools.product (* elems)의 a_perm에 대한 합계 (a_perm))'. 저는 이것을 큐에서 아이템을 팝핑하고, 아이템에 오퍼레이션을 적용하고, 결과를 다른 큐에 푸시하는 것으로 생각합니다. 그리고 큐가 거의 무한하거나 길이가 무한하더라도 여전히 작동합니다. – IceArdor

+0

잘 작동합니다. 감사합니다! –