我想做这样的事情:
x = f(a[0]) or f(a[1]) or f(a[2]) or f(a[3]) or …
具有给定的列表a
和给定的功能f
。与内置any
函数不同,我需要获取列表的第一个被认为是真的值;所以0 or "foo" or 3.2
我需要得到"foo"
,而不仅仅是True
。
当然,我可以写一个小函数,比如
def returnFirst(f, a):
for i in a:
v = f(i)
if v:
return v
return False
x = returnFirst(f, a)
但这可能不是最好的解决方案,原因也在这个 SO question中给出。正如我提到的另一个线程,我当然可以使用基于那里给出的解决方案的代码,例如
x = next((f(x) for x in a if f(x)), False)
但我没有看到一种简单的方法来规避当时的双重召唤f
。
有没有我遗漏或不知道的简单解决方案?像一个
OR((f(x) for x in a))
也许?
我试图找到与此相关的其他问题,但是or
在 SO 中搜索关键字 like 有点问题,所以也许我只是没有找到合适的东西。