Seite 1 von 1

generatorobjekte umkehren?

Verfasst: Samstag 9. Juni 2007, 12:08
von EnTeQuAk
Bei Listen kann man ja ganz einfach den Inhalt umkehren:

Code: Alles auswählen

liste = [1, 2, 3, 4]
rev_liste = liste[::-1]
Beziehungsweise mit `reversed` bei iterationen arbeiten.

Doch wie verhält es sich da bei Generatorobjekten?

`reversed` geht da gar nicht, da es eine Sequenz benötigt.
Gut. Aber gibt es noch eine andere Variante als

Code: Alles auswählen

rev_genobj = (x for x in list(genobj)[::-1])
beziehungsweise

Code: Alles auswählen

rev_genobj = (x for x in reversed(list(g())))
Das würde mich mal interessieren.

MfG EnTeQuAk

Verfasst: Samstag 9. Juni 2007, 12:23
von BlackJack
Generatorobjekte kann man nicht "umkehren". Wie sollte das auch bei "unendlichen" Generatoren funktionieren. Oder bei solchen, deren Elemente von vorherigen abhängig sind.

Bei Deinen Beispielen machst Du übrigens zuviel. `reversed()` liefert schon einen Iterator und eine Liste ist "iterable". Es macht keinen grossen Sinn die nochmal in einen Generatorausdruck zu stecken der nichts mit den Elementen tut, ausser sie weiter zu reichen.

Verfasst: Samstag 9. Juni 2007, 12:41
von EnTeQuAk
Generatorobjekte kann man nicht "umkehren". Wie sollte das auch bei "unendlichen" Generatoren funktionieren. Oder bei solchen, deren Elemente von vorherigen abhängig sind.
Gut, da hast du natürlich recht. An solche Anwendungsfälle hab ich nicht ganz gedacht ;)


MfG EnTeQuAk