This reminds me of getting new sneakers as a kid and trying to keep it clean, only to have a friend deliberately step on it. Was it annoying? Sure. But I gotta admit -- I didn't have to worry about keeping them pristine afterwards.
[(foo(a), bar(a)) for a in collection if condition(a) or alt(a)]
foo_bar = lambda x: (foo(x), bar(x))
condition_or_alt = lambda x: condition(x) or alt(x)
map(foo_bar, filter(condition_or_alt, collection))
As logic gets more complicated, wouldn't list comprehensions become easier to read straight through?