Suche Erklaerung einer for- in loop Syntax

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
Flo668
User
Beiträge: 39
Registriert: Mittwoch 23. Juli 2008, 10:41

Hi,

ich habe in einem Programm, das ich versuche zu debuggen folgende Konstruktion gefunden:

Code: Alles auswählen

 for k, (srcdn, files) in ki:
     afiles = [join(srcdn, x) for x in files]
(ki ist vom Typ Dictionary)

So etwas kenne ich aus C++ oder c# nicht und im Netz habe ich nichts gefunden.

Ich kenne wohl for i in range(0,n) aber das scheint was anderes zu sein. Um den Bug im Originalprogramm zu finden, muss und will ich aber möglichst genau wissen, wie denn die obige Sequenz zu interpretieren ist.

Vielen Dank!
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Flo668 hat geschrieben:... und im Netz habe ich nichts gefunden.
Solche Aussagen finde ich immer ein bisschen merkwürdig. Sollte es nicht selbstverständlich sein, sich mal die Dokumentation der Sprache, die man da verstehen will, anzuschauen? Im Tutorial werden recht weit am Anfang (seit Python 2.6 gibt es offenbar keine Kapitelnummern mehr) list comprehensions erklärt. Das Stichwort sollte dir weiterhelfen.

Stefan
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Solltest du das andere meinen, das nennt sich sequence unpacking.
BlackJack

@Flo668: Entweder ist das nicht der originale Quelltext, oder `ki` ist kein Dictionary, oder das Dictionary hat recht ungewöhnliche Schlüssel.

Arbeite am besten mal das Tutorial aus der Dokumentation durch, da sollten die Bestandteile eigentlich alle abgedeckt werden.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

BlackJack hat geschrieben:@Flo668: Entweder ist das nicht der originale Quelltext, oder `ki` ist kein Dictionary, oder das Dictionary hat recht ungewöhnliche Schlüssel.
Das hat mich auch beschäftigt und ich dachte zunächst, ki könne überhaupt kein Dictionary sein. Stimmt aber nicht, KÖNNTE schon, aber der Schlüssel wäre in der Tat sehr ungewöhnlich:

Code: Alles auswählen

ki = {(1,(2,3)):'a', (4,(5,6)):'b', (7,(8,9)):'c'}
:roll:
BlackJack

@numerix: Ein Blick in die nächste Zeile verrät, das `files` selbst wieder "iterable" ist, das erfüllt Dein Beispiel noch nicht.

Code: Alles auswählen

ki = {(1, (2, ('x', 'y'))): 'a', (4, (5, ('v', 'w'))): 'b', (7, (8, ('f', 'g'))): 'c'}
Ab hier wird's IMHO gruselig und ich hoffe inständig im Original steht so etwas wie ``ki.items()`` in der ``for``-Zeile. :-)
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

BlackJack hat geschrieben:@numerix: Ein Blick in die nächste Zeile verrät, das `files` selbst wieder "iterable" ist, das erfüllt Dein Beispiel noch nicht.
Den Anspruch sollte das Beispiel auch nicht haben. Mir ging es zunächst nur um äußere Schleife.
Tatsächlich wird die Datenstruktur von ki noch abenteuerlicher, wenn man die LC mit einbezieht.
Antworten