Seite 1 von 1
Verschachtelte For-Schleife, Python-Version 2.3 vs. 2.6
Verfasst: Montag 26. September 2011, 17:06
von frank_b
Hallo zusammen,
vielleicht habt Ihr eine Idee: Ich habe bisher mit Python 2.6 gearbeitet. Nun funktioniert mein Programm unter Python 2.3 nicht mehr.
Diese Zeile hier bringt Syntax-Error unter Python 2.3:
Code: Alles auswählen
for link in (links.pop(0) for _ in xrange(len(links)):
Wie kann ich sie am besten 2.3-freundlich umschreiben? Danke!
Frank
Re: Verschachtelte For-Schleife, Python-Version 2.3 vs. 2.6
Verfasst: Montag 26. September 2011, 17:24
von deets
Whoa, das ist ja mal ein kleines fieses Stueckchen code...

Das wuerde ich ehrlich gesagt grundsaetzlich umschreiben, und zwar so:
Wichtig dabei natuerlich, dass innerhalb des von dir nicht gezeigten Blockes nix mit "links" passiert. Aber das waere dann *noch* ein Fall fuer ein Refactoring

Re: Verschachtelte For-Schleife, Python-Version 2.3 vs. 2.6
Verfasst: Dienstag 27. September 2011, 12:23
von Boa
Hallo Frank,
In der Zeile ist ja auch ein Syntax Fehler. Die Anzahl der Klammern ist ungerade.
Re: Verschachtelte For-Schleife, Python-Version 2.3 vs. 2.6
Verfasst: Dienstag 27. September 2011, 12:37
von lunar
@frank_b: Python 2.3 unterstützt keine Generator-Ausdrücke.
Re: Verschachtelte For-Schleife, Python-Version 2.3 vs. 2.6
Verfasst: Dienstag 27. September 2011, 13:03
von Boa
Äquivalent zu deinem Code ist es nicht, aber vermutlich ist es ausreichend ähnlich:
Re: Verschachtelte For-Schleife, Python-Version 2.3 vs. 2.6
Verfasst: Dienstag 27. September 2011, 14:37
von frank_b
@Boa Danke, das ist es!
Re: Verschachtelte For-Schleife, Python-Version 2.3 vs. 2.6
Verfasst: Dienstag 27. September 2011, 15:10
von BlackJack
Ich möchte mich da deets noch mal anschliessen. Das mag jetzt zwar ein Äquivalent sein, aber beides sieht gleich unschön aus. Ist es denn wirklich notwendig, dass die Liste innerhalb der Schleife verändert wird? Und dann auch noch *so*!? Da sieht die Liste einfach falsch gewählt aus.
Re: Verschachtelte For-Schleife, Python-Version 2.3 vs. 2.6
Verfasst: Dienstag 27. September 2011, 15:41
von Boa
@BlackJack: So ist es etwas ästhetischer:
Dass eine Liste in einer Schleife geändert wird ist ein Normalfall und scheint mir nicht unschön. Zumindest solange die Änderung der Liste in einer for-Schleife nicht die Anzahl der Iterationen verändert, was hier aber nicht der Fall ist.
Re: Verschachtelte For-Schleife, Python-Version 2.3 vs. 2.6
Verfasst: Dienstag 27. September 2011, 15:50
von lunar
@Boa: Es ist meist schöner, eine Liste zu kopieren anstatt eine existierende Liste zu verändern.
Re: Verschachtelte For-Schleife, Python-Version 2.3 vs. 2.6
Verfasst: Dienstag 27. September 2011, 16:02
von BlackJack
@Boa: Das die Liste über die iteriert wird, innerhalb der Schleife verändert wird, ist ganz bestimmt nicht der Normalfall und IMHO unschön. Zusätzlich noch das die Liste *so* verändert wird, wie das hier der Fall ist. Wiederholt alle Elemente einer Liste von vorne entfernen ist ineffizient. Dafür ist eine Liste in Python eine unpassende Datenstruktur. Man verwendet nicht ohne Not einen Ansatz mit einem quadratischen Zeitbedarf, wenn es auch linear ginge. Wenn die Veränderung der Liste immer mit einer leeren Liste endet, dann kann man, wie deets das auch getan hat, fragen warum die überhaupt verändert wird. Eine Liste zu leeren und unbedingt wiederverwenden zu wollen ist ebenfalls nicht üblich. Da nimmt man normalerweise einfach eine neue, leere Liste.