Verständnis yield und Schleife, Rekursion?
Verfasst: Freitag 8. Juli 2011, 09:27
Hallo!
Seit ein paar Wochen versuche ich, mir autodidaktisch Python beizubringen, nachdem ich mich an ein Permutationsproblem gewagt habe, hab ich mir folgenden Code "geklaut" und versuche nun, ihn zu verstehen:
(das Beispiel und die 'prints' sind von mir, zum Verständnis)
Hoffe ihr könnt ein wenig Licht reinbringen! Fragen, siehe Kommentare unten...
Vielen Dank schonmal,
Werner
Ausgabe:
e # beispiel[1:] alles ausser dem ersten Buchstaben, eins weiter unten aber nicht, oder doch???
i
s
p
i
e
l
perm: C # <--- Wieso 'C' zuerst? So wie ich das lese müsste es 'B' sein denn: str[1:] heisst doch "alles ausser dem ersten Buchstaben"?
i: 0
yield: BC # Hier wird 'BC' an die erste Schleife zurückgegeben, richtig? Woher weiss das Programm, dass 'BC' nicht zum Ergebnis gehört?
perm: BC
i: 0
yield: ABC
i: 1
yield: BAC
i: 2
yield: BCA
i: 1
yield: CB
perm: CB
i: 0
yield: ACB
i: 1
yield: CAB
i: 2
yield: CBA
('ABC', 'BAC', 'BCA', 'ACB', 'CAB', 'CBA')
Seit ein paar Wochen versuche ich, mir autodidaktisch Python beizubringen, nachdem ich mich an ein Permutationsproblem gewagt habe, hab ich mir folgenden Code "geklaut" und versuche nun, ihn zu verstehen:
(das Beispiel und die 'prints' sind von mir, zum Verständnis)
Hoffe ihr könnt ein wenig Licht reinbringen! Fragen, siehe Kommentare unten...
Vielen Dank schonmal,
Werner
Code: Alles auswählen
beispiel = 'Beispiel'
for i in (beispiel[1:]):
print(i)
def all_perms(str):
if len(str) <=1:
yield str
else:
for perm in all_perms(str[1:]): # <--- Rekursion, Ja oder Nein?
print('perm:', perm)
for i in range(len(perm)+1):
print('i:', i)
print('yield:', perm[:i] + str[0:1] + perm[i:])
yield perm[:i] + str[0:1] + perm[i:]
print(tuple(all_perms('ABC')))
e # beispiel[1:] alles ausser dem ersten Buchstaben, eins weiter unten aber nicht, oder doch???
i
s
p
i
e
l
perm: C # <--- Wieso 'C' zuerst? So wie ich das lese müsste es 'B' sein denn: str[1:] heisst doch "alles ausser dem ersten Buchstaben"?
i: 0
yield: BC # Hier wird 'BC' an die erste Schleife zurückgegeben, richtig? Woher weiss das Programm, dass 'BC' nicht zum Ergebnis gehört?
perm: BC
i: 0
yield: ABC
i: 1
yield: BAC
i: 2
yield: BCA
i: 1
yield: CB
perm: CB
i: 0
yield: ACB
i: 1
yield: CAB
i: 2
yield: CBA
('ABC', 'BAC', 'BCA', 'ACB', 'CAB', 'CBA')