python - 应用于列表的快捷 OR 链

标签 python list

我想做这样的事情:

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/

相关文章:

Python 相当于窗口的 Spark rangeBetween?

Python搜索大列表速度

list - Prolog 中的均匀大小的列表

python - 如何设置当前工作目录?

python - 将日期转换为秒

python - 值更改后使用代理模型更改 QTableView 单元格的背景颜色

python - 如何按给定值反转列表?

python - 如何检查一个列表是否包含另一个列表的 2 个元素?

python - 为什么我的程序比使用 python 内置函数的程序快?

c# - 从特定索引处的字符串数组中删除字符串