itertools.chaîne à chaîne d'une iter liste?
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
Cela fonctionne pour imprimer les combinaisons.
>>>
('A', 'B')
('A', 'C')
('A', 'D')
...
Mais c':
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
ne va pas, il affichera
>>>
<itertools.combinations object at 0x02179210>
<itertools.combinations object at 0x02179240>
<itertools.combinations object at 0x02179270>
Je dois réécrire le code pour en faire des œuvres, comme l'exigeait.
itc = itertools.chain(*its)
Voici ma question:
itertools.chain(iter, iter, iter) vs itertools.chain(*[iter,iter,iter])
Quelle est la différence entre eux? Selon la documentation
le itertools.chain
n':
def chain(*iterables):
# chain('ABC', 'DEF') --> A B C D E F
for it in iterables:
for element in it:
yield element
Alors, pourquoi ne itertools.chain(iter, iter, iter)
travaille aussi ici?
Est-ce qu' iter, iter, iter = *(iter, iter, iter)
?
OriginalL'auteur user478514 | 2011-03-08
Vous devez vous connecter pour publier un commentaire.
Oui.
Mais
itertools.de la chaîne.from_iterable()
.OriginalL'auteur Ignacio Vazquez-Abrams
Pas par lui-même. Argument déballage ne fonctionne que lorsque vous appelez une fonction, donc la suite de deux appels sont équivalentes:
Mais
*[1,2,3]
ne compile pas moins que c'est une partie d'un appel. Vous pouvez mélanger à la normale (de position) arguments avec déballé:ci-dessus est équivalent pour les deux précédents appels.
OriginalL'auteur Rafał Dowgird