Seite 1 von 1

Rekursiver Kombinations-Generator

Verfasst: Samstag 7. März 2009, 21:37
von Dauerbaustelle
Hallo,
ich möchte rekursiv alle möglichen Kombinationen eines Charsets mit einer bestimmen Anzahl an Zeichen generieren. Als Liste wäre das kein Problem, jedoch wird damit irgendwann der RAM voll, deshalb dachte ich mir, mache ich das doch als Generator. Diesen würde ich rekursiv programmieren, jedoch klappt das alles nicht so wie ich will.

Hier die Logik, Code ist bis jetzt kein nutzbarer da, darum frage ich auch.

Code: Alles auswählen

    def combinations(self, chars=''):
        if len(chars) < self.length:
            for char in self.charset:
                result = self.combinations(chars+char)
                yield result
        yield chars
Das gibt mir als Werte des Generator-Indexes immer wieder generator-Objekte, was ich aber nicht brauchen kann...

Ich bräuchte im Endeffekt eine flache Liste, welche erst bei Bedarf (d.h. Zugriff) erzeugt wird.

Verfasst: Samstag 7. März 2009, 21:47
von DasIch

Code: Alles auswählen

from itertools import combinations
Sollte dass fehl schlagen, steht in der Doku äquivalenter Python Code.

Verfasst: Samstag 7. März 2009, 22:02
von BlackJack
@Dauerbaustelle: Ansonsten gibt der Aufruf von Deinem `combinations()` ja einen Generator mit den Kombinationen zurück, auch wenn Du den rekursiv aufrufst. Da musst Du dann natürlich die Ergebnisse vom rekursiven Aufruf in einer Schleife einzeln ``yield``\en und nicht den Generator selber ``yield``\en.

Verfasst: Samstag 7. März 2009, 22:13
von Dauerbaustelle
@DasIch: ...und noch ein Grund mehr, Python 2.6 zu holen (wobei ich auch den Code von der Doku-Seite nehmen könnte)

@BlackJack: Ja klar, ich Depp :D

Danke vielmals euch beiden!