2010-04-02 7 views
2

튜플 v = (a,b,c)과 튜플의 항목을받는 생성자 함수 generate(x)을 고려하고 각 항목에 대해 여러 옵션을 생성합니다.파이썬에서 중첩 된 생성기 함수

튜플의 각 항목에 generate(x)의 결과를 가능한 모든 조합의 집합을 생성하는 파이썬적인 방법은 무엇입니까?

v = (a,b,c) 
for d in generate(v[0]): 
    for e in generate(v[1]): 
     for f in generate(v[2]): 
      print d,e,f 

을하지만 그건 단지 추한 플러스 나는 일반적인 솔루션이 필요합니다 :

나는이 작업을 수행 할 수 있습니다.

답변

8

파이썬 2.6 당신이 원하는 것을 그 기능 itertools.product()이있다 : 워드 프로세서

import itertools 
v = (a, b, c) 
for d, e, f in itertools.product(*(generate(x) for x in v)): 
    print d, e, f 

: 입력 반복 가능 객체의

직교 제품.

생성자 식의 중첩 된 for 루프와 같습니다. 예를 들어, product (A, B)는 B에서 (x는 A에 대해 (x, y))와 같음을 반환합니다.

+0

도움이 될 것 같습니다. 어떻게 결과를 반복 할 수 있습니까? –

+1

@Yuval :'제품에있는 i (for (x) for x)) : do_whatever_you_want (i)' – kennytm

+0

Wicked. 그리고 대답은 그 것을 반영하기 위해 이미 업데이트되었습니다 ... –

관련 문제