The Python list comprehension syntax makes it easy to filter values within a comprehension. For example:
result = [x**2 for x in mylist if type(x) is int]
<
The most obvious (and I would argue most readable) answer is to not use a list comprehension or generator expression, but rather a real generator:
def gen_expensive(mylist):
for item in mylist:
result = expensive(item)
if result:
yield result
It takes more horizontal space, but it's much easier to see what it does at a glance, and you end up not repeating yourself.