Bei Iterator-Schleife einzelne Elemente überspringen

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
Cow
User
Beiträge: 5
Registriert: Montag 10. August 2009, 10:41

Hallo,

Wie schafft man es bei Python, dass der auszuführende Block abgebrochen wird, wenn das Element irgendeine Bedingung nicht erfüllt?

Beispiel:

Code: Alles auswählen

elements = [1, 2, 8, 4, 5, 3]
for element in elements:
    if element > 7:
        nächtes()#brich ab und nimm das nächste element 
    rechnung += element #darf nur dazugerechnet werden, wenn  es            #nicht gößer als 7 ist
Ich weiß, das man dieses Problem hier auch einfach innerhalb der Bedingung mit

Code: Alles auswählen

if element < 8:
    rechnung += element
lösen könnte, aber bei meinem Problem funktioniert das nicht so.
Bei Ruby lässt sich das ganz einfach mit dem Schlüsselwort next erledigen. Bei Python hat next() zwar eine ähnliche, aber nicht genau diese Funktion.

cow
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Code: Alles auswählen

elements = [1, 2, 8, 4, 5, 3]
for element in elements:
    if element > 7:
        continue
    rechnung += element
Die bessere Alternative ist aber, den Vergleich umzuschreiben.

Und weil ich grad Lust hatte gibts das ganze auch noch funktional

Code: Alles auswählen

In [35]: reduce(operator.add, (elem for elem in [1, 2, 8, 4, 5, 3] if elem <= 7))
Out[35]: 15
Und wie immer die Ermahnung: Vermische keine deutschen mit englischen Namen - am besten nur englische.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

@cofi `sum()` existiert.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Code: Alles auswählen

>>> from itertools import ifilter
>>> elements = [1, 2, 8, 4, 5, 3]
>>> rechnung = sum(ifilter(lambda x: x <= 7, elements))
>>> rechnung
15
MfG
HWK
Antworten