code zerpflücken

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
JROppenheimer
User
Beiträge: 13
Registriert: Mittwoch 7. Dezember 2005, 09:17
Wohnort: FFM

Montag 12. Dezember 2005, 21:15

ob es wohl jemanden gibt, der mir folgenden code mal nähern bringen könnte?! vor allem kann ich mit dem "yield" nix anfangen.

es geht um die menge aller permutationen einer menge von Zahlen:

Code: Alles auswählen

def all_perms(str):
    if len(str) <=1:
        yield str
    else:
        for perm in all_perms(str[1:]):
            for i in range(len(perm)+1):
                #nb str[0:1] works in both string and list contexts
                yield perm[:i] + str[0:1] + perm[i:]

danke, gruß T.

Edit (Leonidas): Code in Python-Tags gesetzt.
YOU NO MESS WITH LO WANG!
Benutzeravatar
lutz.horn
User
Beiträge: 205
Registriert: Dienstag 8. November 2005, 12:57
Wohnort: Pforzheim

Dienstag 13. Dezember 2005, 08:17

JROppenheimer hat geschrieben:ob es wohl jemanden gibt, der mir folgenden code mal nähern bringen könnte?! vor allem kann ich mit dem "yield" nix anfangen.

es geht um die menge aller permutationen einer menge von Zahlen:
Zu yield siehe http://docs.python.org/ref/yield.html

Die Funktion all_perms() ist ein Generator. Diese kannst Du z.B. so verwenden:

Code: Alles auswählen

for permutation in all_perms("abcde"):
    print permutation
Die Aufrufe von yield sorgen dafür, das jede berechnete Permutation von "abcde" an den aufrufenden Code, also die for-Schleife, übergeben wird. Dort wird sie der Variablen permuation zugewiesen und kann im Schleifenrumpf verwendet werden. Nachdem der Rumpf der for-Schleife abgearbeitet wurde, macht die Funktion all_perms() da weiter, wo sie aufgehört hat. Da sie rekursiv ist, wird sie irgendwann alle Permutationen des übergebenen Objekts berechnet und mittels yield übergeben haben.

Edit (Leonidas): Code in Python-Tags gesetzt.
Antworten