Seite 1 von 1

code zerpflücken

Verfasst: Montag 12. Dezember 2005, 21:15
von JROppenheimer
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.

Re: code zerpflücken

Verfasst: Dienstag 13. Dezember 2005, 08:17
von lutz.horn
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.