2010-08-06 6 views
1

목록 내부에서 목록을 결합 할 때 알고리즘 도움말이 절실히 필요합니다.목록의 모든 가능한 조합

 
fields = [ ['a1', 'a2', 'a3'], 
      ['b1', 'b2', 'b3'], 
      ['c1', 'c2', 'c3'], 
      ['d1', 'd2', 'd3'] ] 

나는 다음과 같은 코드가 있도록 각 항목 가능한 조합을 생성하는 발전기 (파이썬) 쓰기를 시도하고있다 :

 
for x in thegenerator(fields): 
    print(x) 

하여 줄 것을 나는 다음과 같은 데이터 구조를 가지고 있다고 가정 다음과 같은 출력 :

 
['a1', 'b1', 'c1', 'd1'] 
['a1', 'b1', 'c1', 'd2'] 
['a1', 'b1', 'c1', 'd3'] 
['a1', 'b1', 'c2', 'd1'] 
['a1', 'b1', 'c2', 'd2'] 
['a1', 'b1', 'c2', 'd3'] 
... 
['a3', 'b3', 'c3', 'd3'] 

는하지만, 내 사고 방식 그래서 나는 내가 가장 가장 깨끗한 웨스턴 오스트 레일 리아의 모든 조합을 얻을 수있는 구조를 반복 할 수있는 방법을 생각할 수 없다 오프 완전히 오늘 y는 파이썬을 사용합니다. 나는 이것이 누군가에 의해 이전에 행해졌다고 확신하지만, 구글과 스택에 대한 몇 가지 검색을 한 후에이 문제에 적합한 알고리즘을 찾기 위해 정확한 키워드 조합을 찾는 것을 포기했다.

어떤 아이디어가 가장 깨끗한 알고리즘이 문제를 해결할 수 있을까요?

답변

3
itertools.product(*fields) 
+0

당신 말이 맞아요. 이미 itertools.product를 잠깐 살펴 봤지만, 기능이 조금 달라졌다고 생각하기에 충분히 좋지 않은 것 같습니다. 감사합니다. – agnsaft

10

그냥 itertools.product을 사용하십시오. 정확히 수행하려는 작업을 수행합니다. 알고리즘에 관심이 있다면 항상 소스 코드를 볼 수 있습니다.

+0

좋은 것. 5more – InsertNickHere

+0

* 부끄럽다 * ... 아니. 나는 itertools에 대한 수동 항목을보고 분명히 이것을 놓쳤다. 감사. – agnsaft

관련 문제