Verständnis zur for-Schleife

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
gurami
User
Beiträge: 21
Registriert: Freitag 18. September 2009, 09:41

Hallo Zusammen,

da ich Neuling in Python bin, hab ich wahrscheinlich nur ein Verständnis Problem.

Ich kenne die for-Schleife so:

for(x=0 ; x < len(dateien); x++){

Schleifenanweisung
}

Ich wollte jetzt in Python so was auch schreiben , klappt aber nicht wie ich mir das wohlö gedacht hatte.

Code:

dateien=[{'Maus': 'xxxx', 'Ratte': 'aaaa' }, {'Maus': 'www', 'Ratte': 'asadaa' }, {'Hund': 'rrrr', 'Hase': 'ssss' }]


for jedes_Element in dateien:
jedes_Element = 0 # Sollte der Startwert sein

while jedes_Element < len(dateien)

gleichekeys=set(dateien[jedes_Element].keys()) &
set(dateien[jedes_Element+1].keys())

jedes_Element +=1

Es geht darum das x wie in der 1. For Schleife als Indizie verwendet wird.
Ich habe zwar was gefunden

for x in range(len(datei)):

Aber dies klappt auch nicht so.

Danke schon mal im vorrraus.

gruss gurami
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Ähm, versuche nicht die C-Schleifen abzubilden auf Python-Schleifen. Python iteriert über Elemente des Iterators, nicht über Indizes (was auch viel mehr Sinn macht). Falls du wirklich einen Index brauchst, dann verwende `enumerate`.

Gruß
gurami
User
Beiträge: 21
Registriert: Freitag 18. September 2009, 09:41

Was ist enumerate`. ?

Hast Du ein Beispiel für mich, weil ich kenne dies nicht.

gruss gurami
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Code: Alles auswählen

namen = ["Angela", "Frank Walter", "Guido", "Gregor", "Renate"]

for i, name in enumerate(namen):
    print i, name
Ansonsten einfach mal nach ``enumerate python`` googlen.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Vor allem mal das Tutorial durcharbeiten! Genau dort werden alle diese grundlgenden Dinge besprochen.

http://docs.python.org/tutorial/
BlackJack

Man braucht weder `enumerate()` noch Indizes:

Code: Alles auswählen

from itertools import islice, izip

def main():
    dateien = [{'Maus': 'xxxx', 'Ratte': 'aaaa'},
               {'Maus': 'www', 'Ratte': 'asadaa'},
               {'Hund': 'rrrr', 'Hase': 'ssss'}]
    
    for datei_a, datei_b in izip(dateien, islice(dateien, 1, None)):
        same_keys = set(datei_a) & set(datei_b)
        print same_keys

if __name__ == '__main__':
    main()
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

BlackJack, dein Codebeispiel war sinnlos. Es ist doch sehr einfach zu erkennen, das der OP ein Einsteiger ist.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dauerbaustelle hat geschrieben:BlackJack, dein Codebeispiel war sinnlos. Es ist doch sehr einfach zu erkennen, das der OP ein Einsteiger ist.
Hui... ich sehe einen Diskussions-Thread auf uns zukommen :-D
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dauerbaustelle hat geschrieben:Es ist doch sehr einfach zu erkennen, das der OP ein Einsteiger ist.
Und Einsteiger haben kein Recht auf interessanten Code? Was hast du denn gegen Einsteiger?

@Hyperion: Ack.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Meiner Meinung nach lässt sich eine Programmiersprache durch lesen und nachvollziehen von Code besser lernen als durch "stumpfes" Durchackern der Doku (das Tut natürlich ausgeschlossen). Wenn man etwas nicht verstanden hat, kann man nachfragen oder googlen oder ... .

Ich sehe da also kein Problem (sondern etwas positives), Dauerbaustelle.
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Leonidas hat geschrieben:Was hast du denn gegen Einsteiger?
Einsteiger sind ein eiternder Abszess am Hinter der Menschheit! Weg mit ihnen!

Ernst beiseite,
Leonidas hat geschrieben:Und Einsteiger haben kein Recht auf interessanten Code?
doch, aber ich bin überzeugt davon, dass der OP damit nichts bis sehr wenig anfangen kann, weil seine Übung in Python vermutlich zu gering ist, um in der Schleifendefinition eine Iteration mit jeweils den Elementen x[n] und x[n+1] zu erkennen.

Btw, gab es nicht mal sowas wie `pairwise` in den itertools? Das so fungiert wie `reduce`, nur ohne reduce? :D
BlackJack

@Dauerbaustelle: Aber man kann doch einfach die Dokumentation von den verwendeten Funktionen lesen und die einzelnen Teile in einer Python-Shell ausprobieren. Ich finde meinen Code überhaupt nicht sinnlos, weil er zeigt, wie man das ohne diese hässlichen Indizes machen kann.

*Mit* Indizes sollte man das auch ohne Hilfe hinbekommen. Wer das nach einer Einführung in Schleifen und die Grunddatentypen nicht schafft, sollte die Finger vom Programmieren lassen. :-P
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

BlackJack hat geschrieben:@Dauerbaustelle: Aber man kann doch einfach die Dokumentation von den verwendeten Funktionen lesen und die einzelnen Teile in einer Python-Shell ausprobieren.
Ich glaube, dass das zu viel ist auf einmal.
Ich finde meinen Code überhaupt nicht sinnlos.
Ich auch nicht, aber ich finde in sinnlos für den OP.
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Ich würde behaupten dem OP nicht unbedingt hilfreich, für den Rest aber sicherlich interessant
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

jbs hat geschrieben:Ich würde behaupten dem OP nicht unbedingt hilfreich, für den Rest aber sicherlich interessant
Aber zumindest zeigt es ihm auf, dass es in Python viele Wege gibt. Außerdem lesen ja auch andere so einen Thread, wie Du ja richtiger Weise schon angesprochen hast.

Ich finde so etwas jedenfalls immer interessant und bin für derartige Snippets dankbar :-)
meneliel
User
Beiträge: 256
Registriert: Montag 25. Juni 2007, 08:35
Kontaktdaten:

Dauerbaustelle hat geschrieben:BlackJack, dein Codebeispiel war sinnlos. Es ist doch sehr einfach zu erkennen, das der OP ein Einsteiger ist.
Finde ich nicht. Ich war auch gaaaaaaanz neu, als BlackJack damals ein Problem meinerseits mit den Itertools effektiver lösen konnte und so viel eleganter, hat zwar ein klein wenig gedauert bis ich es verstanden hatte, war aber gut, dass das gleich "am Anfang" kam, weil sie mir hinterher immer wieder geholfen haben. Hab damals dann auch die Doku durchgelesen und nachgefragt, wenn ich nicht weiter kam. Warum nicht gleich sehen, wie es auch geht und wie es schöner geht ...?
Antworten