Unikanie powtarzających się wywołań funkcji w składni rozumienia listy
Mam zrozumienie listy, które jest zbliżone do:
[f(x) for x in l if f(x)]
Gdzie l to lista, a f (x) to kosztowna funkcja, która zwraca listę.
Chcę uniknąć oceny f (x) dwa razy za każde niepuste wystąpienie f (x). Czy jest jakiś sposób na zapisanie wyników w rozumieniu listy?
Mogłem usunąć ostateczny stan, wygenerować całą listę, a następnie ją przyciąć, ale to wydaje się marnotrawstwem.