Ich möchte einen idiomatischen Weg, um das erste Element in einer Liste zu finden, das mit einem Prädikat übereinstimmt.
Der aktuelle Code ist ziemlich hässlich:
[x for x in seq if predicate(x)][0]
Ich habe darüber nachgedacht, es zu ändern in:
from itertools import dropwhile dropwhile(lambda x: not predicate(x), seq).next()
Aber es muss etwas Eleganteres geben... Und es wäre schön, wenn es einen None
-Wert zurückgeben würde anstatt eine Ausnahme auszulösen, wenn keine Übereinstimmung gefunden wird.
Ich weiß, ich könnte einfach eine Funktion definieren wie:
def get_first(predicate, seq): for i in seq : if predicate(i): return i return None
Aber es ist ziemlich geschmacklos, den Code mit Hilfsfunktionen wie dieser zu füllen (und die Leute werden wahrscheinlich nicht bemerken, dass sie bereits da sind, daher neigen sie dazu, sich im Laufe der Zeit zu wiederholen), wenn es bereits eingebaute Funktionen gibt.