Ich möchte auf idiomatische Weise das erste Element in einer Liste finden, das einem Prädikat entspricht.
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ückgibt , 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
Es ist jedoch geschmacklos, den Code mit solchen Dienstprogrammfunktionen zu füllen (und die Leute werden wahrscheinlich nicht bemerken, dass sie bereits vorhanden sind, sodass sie sich im Laufe der Zeit wiederholen), wenn es integrierte Funktionen gibt, die diese bereits bereitstellen.