2011-03-08 5 views
8
import itertools 
def _yield_sample(): 
    it = iter(itertools.combinations('ABCD', 2)) 
    it2 = iter(itertools.combinations('EFGH', 3)) 
    itc = itertools.chain(it,it2) 
    for x in itc: 
     yield x 

def main(): 
    for x in _yield_sample(): 
     print x 

이렇게하면 조합을 인쇄 할 수 있습니다.itertools.chain iter 목록을 연결 하시겠습니까?

>>> 
('A', 'B') 
('A', 'C') 
('A', 'D') 
... 

하지만이 :

def __position_combination(_count = [2,3,4,5]): 
    its = [] 
    for ct in _count: 
     it = iter(itertools.combinations('ABCDEFG', ct)) 
     its.append(it) 
    itc = itertools.chain(its) 
    for x in itc: 
     yield x 

def main(): 
    for x in __position_combination(): 
     print x 

, 그것은

>>> 
<itertools.combinations object at 0x02179210> 
<itertools.combinations object at 0x02179240> 
<itertools.combinations object at 0x02179270> 

을 인쇄 할 수 없습니다 내가 요구하는대로 작동하도록 코드를 다시 작성해야합니다. 그들 사이의 차이가 무엇

itertools.chain(iter, iter, iter) vs itertools.chain(*[iter,iter,iter]) 

: 여기

itc = itertools.chain(*its) 

내 질문입니까? documentation itertools.chain에 따라 수행합니다 또한 itertools.chain(iter, iter, iter) 않는 이유

def chain(*iterables): 
    # chain('ABC', 'DEF') --> A B C D E F 
    for it in iterables: 
     for element in it: 
      yield element 

그래서, 여기에 작동?
iter, iter, iter = *(iter, iter, iter)을 의미합니까?

답변

3

은 iter, iter, iter = * (iter, iter, iter)입니까?

이 전화의 일부가 아니라면

f(1,2,3) 
f(*[1,2,3]) 

그러나 *[1,2,3]가 컴파일되지 않습니다 : 함수를 호출, 그래서 다음 두 호출이 동일 경우에만 풀고 인수 작동합니다. 일반 (위치) 인수를 압축 해제 된 인수와 함께 사용할 수 있습니다.

f(1,*[2,3]) 

위의 내용은 앞의 두 번의 호출과 동일합니다.

+0

"인수 언 패킹" – user478514