listenelemente der Reihe nach vergleichen

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
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Und es sollte natürlich

Code: Alles auswählen

zip(c, c[1:])
sein und nicht

Code: Alles auswählen

zip(c, c[:1])
Sonst ist das Ergebnis etwas langweilig :D
Das Leben ist wie ein Tennisball.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Sirius3 hat geschrieben:...oder es direkt im Interaktiven Modus ausprobieren.
+1

@haeuslermartin: Hast Du schon einmal eine Python-Shell aufgemacht? Genau für solche Dinge zum Ausprobieren ist die super geeignet! Das schreibt man nicht in seinen Editor, speichert es und ruft dann das Script auf. Nein, einfach in eine Python Shell pasten oder eintippen und ausprobieren :-)

Im offiziellen Tutorial wird das Öffnen und Arbeiten darin iirc gleich zu Beginn beschrieben. Sollte das in Deinem Lehrbuch nicht der Fall sein, so wäre das schlecht und würde mich an der Qualität des Buches zweifeln lassen :-)

Viele installieren Regulars hier nutzen übirgens IPython, welche noch mehr nette Möglichkeiten bietet als die Standard Python Shell.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
haeuslermartin
User
Beiträge: 66
Registriert: Sonntag 21. April 2013, 10:12

dann hab ich das am Anfang ja sogar richtig gemacht mit c[1:] statt c[:1] !!

falsch ist übrigens auch : if i > j:

ich will ja wissen ob der zweite Wert grösser, kleiner, gleich ist,als der vorige ..

also: if j > i :

jetzt krieg ich die richtigen Ergebnisse!!

Trotzdem der Hinweis war entscheidend, vielen Dank!

ps: natürlich probier ich auch in der shell, aber da muss ich jede Variante wieder von vorne machen, und mit der Zeit habe ich da jede Menge Unsinn drauf, da finde ich ein kleines programmchen im neuen Fenster der IDLE praktischer, -ändern, -speichern, -laufen lassen, und wenns klappt, hab ichs auch gleich im Ordner.
nezzcarth
User
Beiträge: 1634
Registriert: Samstag 16. April 2011, 12:47

haeuslermartin hat geschrieben:

Code: Alles auswählen

c=[1,3,2,5,6,6,7,]

#der jeweils nächste Wert mit dem vorhergehenden verglichen, also 3 ist grösser wie 1,  2 ist kleiner wie 3, usw.
#der erste Wert hat ja keinen Vorgänger, darum "for i in c[1:]:", das müsste richtig sein, aber ansonsten blockieren meine grauen Zellen wieder einmal ...

for i in c[1:]:
	if i+1 >i:
		print("grösser")
	elif i+1 ==i:
		print("gleich")
	else:
		print("kleiner")
[/code]
@haeuslermartin:
Ich weiß nicht, ob das noch relevant ist, da du ja schon die beste Lösung genannt bekommen hast, aber vielleicht ist interessant, wo der Fehler in deinem Vorschlag war:
die Variable 'i' enthält immer das aktuelle Listenelement. i+1 >i muss für positive Zahlen immer wahr sein, weil du nicht auf das nächste Listenelement zugreifst, sondern mit der konkreten Zahl rechnest; für den ersten Durchlauf steht da 3+1 > 3. Irgendwie musst du an die anderen Listenelemente kommen, was in dem aktuellen Code nicht möglich ist. Eine einfache Variante deines Vorschlags ist folgende:

Code: Alles auswählen

c = [1,3,2,5,6,6,7,]
j = c[0]
for i in c[1:]:
        if i > j:
                print("grösser")
        elif j == i:
                print("gleich")
        else:
                print("kleiner")
        j = i
Man merkt sich den jeweils letzten Wert und vergleicht damit.

Weiterhin ist es möglich mit Indizes zu arbeiten, statt mit den konkreten Werten; das ist ein die "traditionelle" Variante, die man vielleicht in Pascal oder so verwendet hätte:

Code: Alles auswählen

c = [1,3,2,5,6,6,7,]
for i in range(len(c)-1):
        if c[i+1] > c[i]:
                print("grösser")
        elif c[i+1] == c[i]:
                print("gleich")
        else:
                print("kleiner")
Allerdings sollte man keine von beiden Versionen in Python verwenden, weil das sehr umständlich ist. Trotzdem denke ich, dass es vielleicht interessant sein kann zu wissen, wo der Fehler lag, welche Alternativlösungen es gibt, und weshalb man die in Python nicht verwendet.
haeuslermartin
User
Beiträge: 66
Registriert: Sonntag 21. April 2013, 10:12

ja, vielen Dank,
ich hab mir das schon gedacht, warum meine Lösung falsch ist, (ich hab ja mehrere probiert), aber auf die richtige kam ich einfach nicht.
In den Anfängerlehrbüchern ist immer sehr schön das Grundsätzliche beschrieben, aber bei konkreten Problemen reicht das halt oft nicht aus ...
und wenn man neugierig ist, prellt man im Stoff schon gerne etwas vor ..
danke nochmal!
Antworten