2010-03-14 27 views
27

J'ai un générateur (nombres) et une valeur (nombre). Je voudrais itérer sur ceux-ci comme si elles étaient une séquence:Générateur de concaténation et article

i for i in tuple(my_generator) + (my_value,) 

Le problème est, pour autant que j'undestand, cela crée 3 tuples seulement pour les jeter immédiatement et copie également des éléments dans « my_generator » une fois.

Mieux approch serait:

def con(seq, item): 
    for i in seq: 
     yield seq 
    yield item 

i for i in con(my_generator, my_value) 

Mais je me demandais s'il est possible de le faire sans que la définition de la fonction

Répondre

40

itertools.chain traite plusieurs séquences comme une seule séquence.

Vous pouvez l'utiliser comme:

import itertools 

def my_generator(): 
    yield 1 
    yield 2 

for i in itertools.chain(my_generator(), [5]): 
    print i 

qui génèrerait:

1 
2 
5 
+0

Il est assez fou que l'ajout de générateurs n'est pas intégré à python. Je comprends l'argument de finitude, mais le même problème se produit pour 'itertools.chain', non? – DylanYoung