我想做这样的事情:
x = f(a[0]) or f(a[1]) or f(a[2]) or f(a[3]) or …
具有给定列表a
和给定函数f
。与内置的 any
函数不同,我需要获取列表中被认为是 true 的第一个值;因此,对于 0 或“foo”或 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)
但这可能不是最好的解决方案,原因也在 this SO question 中给出。 。正如我提到的另一个线程,我当然可以使用基于 那里给出的解决方案,例如
x = next((f(x) for x in a if f(x)), False)
但我没有找到一种简单的方法来规避 f
的双重调用。
是否有任何我缺少或只是不知道的简单解决方案?类似的东西
OR((f(x) for x in a))
也许?
我试图找到与此相关的其他问题,但是搜索像或
这样的关键字在SO中有点问题,所以也许我只是没有找到合适的东西。
最佳答案
这应该有效:
next((x for y in a for x in (f(y),) if x),False)
关于python - 应用于列表的快捷 OR 链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18208730/