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.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage