Also entweder habe ich etwas falsch verstanden oder ich wende es einfach nur falsch an:
Code: Alles auswählen
In [24]: def g():
....: for i in xrange(10):
....: yield i
....:
....:
In [25]: gen = g()
In [26]: gen
Out[26]: <generator object at 0xb78fe70c>
In [27]: liste = list(tee(gen, 1))
In [28]: liste
Out[28]: [<itertools.tee object at 0xb78b728c>]
In [29]: liste = list(tee(gen, 1)[0])
In [30]: liste
Out[30]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
In [31]: gen.next()
---------------------------------------------------------------------------
<type 'exceptions.StopIteration'> Traceback (most recent call last)
/home/ente/<ipython console> in <module>()
<type 'exceptions.StopIteration'>:
Also wird dort doch der Generator komplett wieder abgearbeitet.
Oder muss ich `tee(gen, 2)` verwenden und später `gen` `tee(gen, 2)[1]` zuweisen und mit `tee(gen, 2)[0]` arbeiten? Wenn dem so sein soll
fänd ich das fein
(also nach dem Motto:)
Code: Alles auswählen
In [33]: gens = tee(gen, 2)
In [34]: liste = list(gens[0])
In [35]: liste
Out[35]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
In [36]: gen = gens[1]
In [37]: gen
Out[37]: <itertools.tee object at 0xb78b742c>
Und um das wieder in einen richtigen Generator umzuwandeln könnte ich ja dann einfach wieder
``gen = (x for x in gen)``
verwenden.
Ich denke letztere Version kommt hier für mich in Frage.
Danke, EyDu
MfG EnTeQuAk
€dit
Eine andere möglichkeit währe doch einfach
Code: Alles auswählen
In [44]: gen = g()
In [45]: gen
Out[45]: <generator object at 0xb791a2cc>
In [46]: gens = ((x for x in gen), (x for x in gen))
In [47]: gens
Out[47]: (<generator object at 0xb78b7d4c>, <generator object at 0xb78b7f0c>)
zu machen oder? Das macht doch im prinziep das gleiche, was tee macht (für meinen Anwendungsfall).