Abkürzung ODER-Kette angewendet auf Liste
Ich würde gerne so etwas machen:
x = f(a[0]) or f(a[1]) or f(a[2]) or f(a[3]) or …
mit einer gegebenen Listea
und eine gegebene Funktionf
. Im Gegensatz zum eingebautenany
Funktion Ich muss den ersten Wert der Liste abrufen, der als wahr angesehen wird. so für0 or "foo" or 3.2
Ich benötige"foo"
, nicht nurTrue
.
Natürlich könnte ich eine kleine Funktion wie schreiben
def returnFirst(f, a):
for i in a:
v = f(i)
if v:
return v
return False
x = returnFirst(f, a)
aber das ist wahrscheinlich nicht die schönste lösung, auch aus den in angegebenen gründendiese SO Frage. Wie ich diesen anderen Thread erwähne, könnte ich natürlich Code verwenden, der auf der dort angegebenen Lösung basiert, z.
x = next((f(x) for x in a if f(x)), False)
Aber ich sehe keinen einfachen Weg, um die doppelte Berufung zu umgehenf
dann.
Gibt es eine einfache Lösung, die mir fehlt oder die ich einfach nicht kenne? So etwas wie eine
OR((f(x) for x in a))
könnte sein?
Ich habe versucht, andere Fragen zu diesem Thema zu finden, aber nach Stichwörtern wie gesuchtor
ist ein bisschen problematisch in SO, also habe ich vielleicht einfach nichts passendes gefunden.