Seite 1 von 1

Verständnis zur for-Schleife

Verfasst: Montag 28. September 2009, 20:39
von gurami
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

Verfasst: Montag 28. September 2009, 20:48
von Dauerbaustelle
Ä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ß

Verfasst: Montag 28. September 2009, 21:31
von gurami
Was ist enumerate`. ?

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

gruss gurami

Verfasst: Montag 28. September 2009, 21:33
von jbs

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.

Verfasst: Montag 28. September 2009, 21:53
von Hyperion
Vor allem mal das Tutorial durcharbeiten! Genau dort werden alle diese grundlgenden Dinge besprochen.

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

Verfasst: Montag 28. September 2009, 22:13
von 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()

Verfasst: Dienstag 29. September 2009, 11:15
von Dauerbaustelle
BlackJack, dein Codebeispiel war sinnlos. Es ist doch sehr einfach zu erkennen, das der OP ein Einsteiger ist.

Verfasst: Dienstag 29. September 2009, 12:19
von Hyperion
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

Verfasst: Dienstag 29. September 2009, 12:31
von Leonidas
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.

Verfasst: Dienstag 29. September 2009, 15:44
von derdon
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.

Verfasst: Dienstag 29. September 2009, 16:51
von Dauerbaustelle
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

Verfasst: Dienstag 29. September 2009, 17:27
von 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

Verfasst: Dienstag 29. September 2009, 17:40
von Dauerbaustelle
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.

Verfasst: Dienstag 29. September 2009, 19:09
von jbs
Ich würde behaupten dem OP nicht unbedingt hilfreich, für den Rest aber sicherlich interessant

Verfasst: Dienstag 29. September 2009, 23:13
von Hyperion
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 :-)

Verfasst: Mittwoch 30. September 2009, 09:56
von meneliel
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 ...?