2017-10-12 10 views
1

In Ruby können Sie die Methode #find verwenden, um einen Kurzschluss zu erzeugen, nachdem die erste Instanz in einem Array gefunden wurde, das einem bestimmten Kriterium entspricht.gibt es eine Enumerator Find-Methode in Python?

arr = [5,6,7] 
arr.find { |n| n % 2 == 0 } #=> 6 

Gibt es ein Äquivalent in Python? Oder brauchst du eine for-Schleife? Ich versuche, dies zu vermeiden:

arr = [5,6,7] 
for n in arr: 
    return n if n % 2 == 0 

Vielleicht gibt es eine Lösung mit Generatoren? Oder vielleicht sind For-Loops einfach die einzige pythonische Lösung.

Antwort

6

Perhaps there's a solution with generators?

Ja, können Sie einen Generator verwenden und next auf es nennen. Gibt das erste Element mit diesen Kriterien und wirft einen StopIteration Fehler, wenn kein:

next(n for n in arr if n % 2 == 0) 

Python kann Sie auch einen Standardrückgabewert, falls keine passieren die Elemente die Filterkriterien entsprechen dabei den Fehler zu unterdrücken:

next((n for n in arr if n % 2 == 0), None) 
+1

Es ist wahrscheinlich nützlich zu sagen, _which_ Fehler wird ausgelöst, wenn nichts gefunden wird, so OP weiß, wie man es fängt :-) – mgilson

+0

@mgilson Ja, ich habe aktualisiert. –

+1

Yep, 'None' ist wirklich der beste Rückgabewert, da' nil' von der '# find' Methode in Ruby zurückgegeben wird. –

Verwandte Themen