Seite 1 von 1

for in erkläreung bitte!

Verfasst: Donnerstag 22. Januar 2009, 21:50
von snaik
Hi,
habe gerade(als C++ programmierer) die "for in"SChleife in Python gelernt.

also

Code: Alles auswählen

for x in array
geht durch alle elementen in array.

aber was macht das hier:

Code: Alles auswählen

self.editLink= [link for link in etree.parse(StringIO.StringIO(inhalt)).xpath("/a:entry/a:link[@rel='edit']/@href", namespaces=NAMESPACES)]
mich irritiert das link unmittelbar vor dem "for".

also da wird ansonsten aus einem XML file ein link eintrag geholt.(die varable heisst dummerweise auch link.)

Das Beispiel habe ich aus einem tutorial für die Google API

danke für Antworten!

Verfasst: Donnerstag 22. Januar 2009, 21:54
von cofi
Der Ausdruck ist eine List comprehension, was eine leichte Möglichkeit ist Listen zu erstellen.
In deinem Beispiel wird eine Liste mit allen Nodes(wenn ich das richtig seh) erstellt, die dem XPath-Pattern entsprechen. Ohne List comprehension:

Code: Alles auswählen

self.edit_link = []
for link in  etree.parse(StringIO.StringIO(inhalt)).xpath("/a:entry/a:link[@rel='edit']/@href", namespaces=NAMESPACES):
    self.edit_link.append(link)
http://www.python.org/dev/peps/pep-0202/
http://en.wikipedia.org/wiki/List_comprehension

Verfasst: Donnerstag 22. Januar 2009, 22:14
von snaik
oh.. ist das also so eine Art array das mit den ergebnissen gefüllt wird?

Also kann man die Variable nochmals vor der Schleife plazieren:

Code: Alles auswählen

(variale) for (variable) in (Array)


und damit ein array zu füllen.
Python ist sehr gewöhnungsbedürftig für mich :)
aber interessant.

danke!

Verfasst: Donnerstag 22. Januar 2009, 22:20
von Nocta
snaik hat geschrieben:oh.. ist das also so eine Art array das mit den ergebnissen gefüllt wird?
Man könnte das "Art Array" auch durch "Liste" ersetzen, so heißt der Datentyp nämlich ;)
snaik hat geschrieben:Also kann man die Variable nochmals vor der Schleife plazieren:

Code: Alles auswählen

(variale) for (variable) in (Array)


und damit ein array zu füllen.
Python ist sehr gewöhnungsbedürftig für mich :)
aber interessant.
1. Lies dir am besten mal in der Dokumentation durch, was List Comprehensions sind. Im Prinzip hast du zwar recht, aber irgendwo auch doch nicht :p
2. Dürfte das Gewöhnen gar nicht mal so schwer fallen, ist viel angenehmer als C++ :)

Verfasst: Freitag 23. Januar 2009, 00:32
von snafu
Ich merk mir das so: Das was am Ende "appendet" werden soll, kommt an den Anfang. Alles, was danach kommt, ist eigentlich nur runterschreiben ohne Doppelpunkte und Einrückungen. Oft mache ich mir zuerst eine Variante mit Einrückungen, die ich dann später in List Comprehension umwandle.

Verfasst: Freitag 23. Januar 2009, 07:42
von bwbg
Man kann sogar bestimmen, welche Werte aus der Liste (hier: range) verwendet werden sollen, man kann mit diesen auch unmittelbar Berechnungen durchführen.

Code: Alles auswählen

>>> [n ** 2 for n in range(1, 11) if n % 2 == 0]
[4, 16, 36, 64, 100]
Grüße... Heiko