Der effizienteste Weg in Python 3 ist einer der folgenden (anhand eines ähnlichen Beispiels):
Mit "Verstehen" Stil:
next(i for i in range(100000000) if i == 1000)
WARNUNG : Der Ausdruck funktioniert auch mit Python 2, aber im Beispiel wird verwendet range
das in Python 3 ein iterierbares Objekt zurückgibt, anstatt einer Liste wie in Python 2 (wenn Sie eine iterierbare Datei in Python 2 erstellen wollen, verwenden Sie xrange
stattdessen).
Beachten Sie, dass der Ausdruck vermeiden, um eine Liste in der comprehension Ausdruck zu konstruieren next([i for ...])
Das würde dazu führen, dass eine Liste mit allen Elementen erstellt wird, bevor die Elemente gefiltert werden, und würde dazu führen, dass die gesamten Optionen verarbeitet werden, anstatt die Iteration einmal anzuhalten i == 1000
.
Mit "funktionell" Stil:
next(filter(lambda i: i == 1000, range(100000000)))
WARNUNG : Das funktioniert in Python 2 nicht, auch nicht beim Ersetzen von range
con xrange
aufgrund dessen filter
eine Liste anstelle eines Iterators erstellen (ineffizient), und die next
Funktion funktioniert nur mit Iteratoren.
Standardwert
Wie bereits in anderen Antworten erwähnt, müssen Sie der Funktion einen Extra-Parameter hinzufügen next
wenn Sie eine Ausnahme vermeiden wollen, die ausgelöst wird, wenn die Bedingung nicht erfüllt ist.
"funktionell" Stil:
next(filter(lambda i: i == 1000, range(100000000)), False)
"Verstehen" Stil:
Bei diesem Stil müssen Sie den Ausdruck "comprehension" mit ()
zur Vermeidung einer SyntaxError: Generator expression must be parenthesized if not sole argument
:
next((i for i in range(100000000) if i == 1000), False)
8 Stimmen
Verwandt: Das Erhalten der Index des ersten Elements, das eine Bedingung erfüllt