Lista de compreensão com condição

Eu tenho uma lista simples.

>>> a = [0, 1, 2]

Quero fazer uma nova lista usando uma compreensão de lista.

>>> b = [x*2 for x in a]
>>> b
[0, 2, 4]

Muito simples, mas e se eu quiser operar apenas sobre elementos diferentes de zero?

'if' needs 'else' na compreensão da lista, então eu vim com isso.

>>> b = [x*2 if x != 0 else None for x in a]
>>> b
[None, 2, 4]

Mas o resultado desejável é.

>>> b
[2, 4]

Eu posso fazer assim

>>> a = [0, 1, 2]
>>> def f(arg):
...     for x in arg:
...         if x != 0:
...             yield x*2
... 
>>> list(f(a))
[2, 4]

ou usando 'filter' e um lambda

>>> a = [0, 1, 2]
>>> list(filter(lambda x: x != 0, a))
[1, 2]

Como obtenho esse resultado usando uma compreensão de lista?

questionAnswers(2)

yourAnswerToTheQuestion