リストの内包表記について質問があります。

def foo(func, list):
for item in list:
result = func(item)
if result:
return result
return False

みたいな関数を同じ計算量で内包表記で書くことはできますか?

def foo(func, list):
return [func(item) for item in list if func(item)]

というのを考えたのですが、

1. list の要素すべてにアクセスしてしまう
2. func を 2 回呼びだしてしまう

という点で元の関数と違ってしまいます。