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.

questionAnswers(11)

yourAnswerToTheQuestion