假设我有一个执行一些繁重计算的函数。
def f(x):
...
return result
然后我有一个列表,其中包含我想传递给的值f()
:
my_list = [2, 98, 4, 34, 23, 11]
我想x
在这个列表中找到第一个验证条件的元素f(x)
(比如说f(x) != 0
),并得到这个计算结果。
基本上,我会写一个for
这样的循环:
def first_match(my_list):
for x in my_list:
r = f(x)
if r != 0:
return r
我想知道是否有办法使用生成器表达式获得相同的结果?
到目前为止,我认为是这样的:
r = next(f(x) if f(x) != 0 for x in my_list)
问题是这调用f()
了两次。