Seite 1 von 1

Bei Iterator-Schleife einzelne Elemente überspringen

Verfasst: Sonntag 13. September 2009, 13:45
von Cow
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

Verfasst: Sonntag 13. September 2009, 14:04
von cofi

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.

Verfasst: Sonntag 13. September 2009, 14:22
von DasIch
@cofi `sum()` existiert.

Verfasst: Sonntag 13. September 2009, 14:30
von HWK

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