itertools.chain链接一个iter列表?

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
这适用于打印组合。
>>> 
('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>
我必须重写代码以使其按要求工作。
itc = itertools.chain(*its)
这是我的问题:
itertools.chain(iter, iter, iter)  vs    itertools.chain(*[iter,iter,iter])
他们之间有什么不同?根据文件
itertools.chain
def chain(*iterables):
    # chain('ABC', 'DEF') --> A B C D E F
    for it in iterables:
        for element in it:
            yield element
那么,为什么
itertools.chain(iter, iter, iter)
也适用于此? 这意味着
iter, iter, iter = *(iter, iter, iter)
?     
已邀请:
是。 但是
itertools.chain.from_iterable()
。     
  它意味着iter,iter,iter = *(iter,iter,iter)? 不是单独的。参数解包仅在调用函数时有效,因此以下两个调用是等效的:
f(1,2,3)
f(*[1,2,3])
但是
*[1,2,3]
不会编译,除非它是一个电话的一部分。您可以将正常(位置)参数与未压缩的参数混合使用:
f(1,*[2,3])
所以上面也相当于前两次调用。     

要回复问题请先登录注册