2010-03-14 11 views
27

Ich habe einen Generator (Zahlen) und einen Wert (Nummer). Ich möchte über diese zu durchlaufen, als ob sie eine Folge waren:Verketten Generator und Artikel

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

Das Problem ist, soweit ich undestand, das nur 3 Tupel erzeugt unmittelbar um sie zu verwerfen und auch Kopien Artikel in „my_generator“ einmal.

Bessere approch wäre:

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

i for i in con(my_generator, my_value) 

Aber ich habe mich gefragt, ob es möglich ist, ohne die vorgenannte Funktionsdefinition zu tun

Antwort

40

itertools.chain behandelt mehrere Sequenzen als eine einzige Sequenz.

import itertools 

def my_generator(): 
    yield 1 
    yield 2 

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

die würden Ausgabe:

1 
2 
5 
+0

Es ist ziemlich verrückt, dass Zusatz von Generatoren nicht in Python eingebaut ist. Ich verstehe das Endlichkeitsargument, aber das gleiche Problem tritt bei 'itertools.chain' auf, oder? – DylanYoung