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
не будет, он распечатает
>>>
Мне нужно переписать код, чтобы он работал, как требуется.
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)
?