Seite 1 von 1
for statement
Verfasst: Freitag 9. Juli 2004, 15:11
von student
hi, lese gerade die Doku(bin noch newb)
Frage zur folgenden Schleife:
Code: Alles auswählen
a=['cat', 'window', 'defenestrate']
for x in a[:]:
if len(x) > 6: a.insert(0, x)
warum kann ich hier nicht einfach nur
for x in a:
.....
schreiben??
warum dieses [:] hinter a?
viele grüße
student
Verfasst: Freitag 9. Juli 2004, 15:33
von Milan
Hi. Lass dir danach mal a ausgeben, dann wirst du sehen, dass a erweitert wurde. Mit a[:] wird nur über eine Kopie von a iteriert, die sich nicht verändert. Damit soll wohl in der Docu zum Ausdruck gebracht werden, dass man Sequenz, über die man gerade iteriert besser nicht verändern sollte, in diesem Fall würde das zu einer Endlosschleife führen. Du musst nämlich wissen, dass Listen und Dictionary vom Typ mutable sind, also veränderbar. Wenn ich nun a mit den Methoden verändere, wird während der Iteration die Liste verlängert und immer wieder ein Stein dazugesetzt, sodas i scheinbar gar nicht vom Fleck kommt. Mit der Kopie wird das verhindert. Solch eine Anwendung ist aber wohl eher selten.
Verfasst: Freitag 9. Juli 2004, 16:50
von Dookie
Hi,
um das im Source noch deutlicher zu machen würde ich das dann so lösen:
Code: Alles auswählen
a=['cat', 'window', 'defenestrate']
for x in tuple(a):
if len(x) > 6: a.insert(0, x)
jetzt wird aus der Liste a ein Tuple erzeugt über welches dann iteriert wird. Tuples sind imutable, also unveränderlich.
Gruß
Dookie