for in erkläreung bitte!

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
snaik
User
Beiträge: 2
Registriert: Donnerstag 22. Januar 2009, 21:46

Donnerstag 22. Januar 2009, 21:50

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!
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Donnerstag 22. Januar 2009, 21:54

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
Zuletzt geändert von cofi am Donnerstag 22. Januar 2009, 22:20, insgesamt 1-mal geändert.
snaik
User
Beiträge: 2
Registriert: Donnerstag 22. Januar 2009, 21:46

Donnerstag 22. Januar 2009, 22:14

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!
Nocta
User
Beiträge: 290
Registriert: Freitag 22. Juni 2007, 14:13

Donnerstag 22. Januar 2009, 22:20

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++ :)
Benutzeravatar
snafu
User
Beiträge: 5531
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Freitag 23. Januar 2009, 00:32

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.
shcol (Repo | Doc | PyPi)
Benutzeravatar
bwbg
User
Beiträge: 381
Registriert: Mittwoch 23. Januar 2008, 13:35

Freitag 23. Januar 2009, 07:42

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
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
Antworten