Lista de comprensión con condición

Tengo una lista simple.

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

Quiero hacer una nueva lista a partir de una lista de comprensión.

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

Bastante simple, pero ¿y si quiero operar solo sobre elementos distintos de cero?

“si” necesita “otra cosa” en la lista de comprensión, así que se me ocurrió esto.

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

Pero el resultado deseable es.

 >>> b [2, 4] 

Puedo hacerlo de esta manera

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

o usando ‘filtro’ y un lambda

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

¿Cómo obtengo este resultado utilizando una lista de comprensión?

 b = [x*2 for x in a if x != 0] 

Si pone su condición al final, no necesita otra cosa (el hecho no puede tener otra cosa allí)

Siguiendo el patrón:

 [  for  in  if  ] 

Podemos resolverlo como:

 >>> lst = [0, 1, 2] >>> [num ... for num in lst ... if num != 0] [1, 2] 

Se trata de formar una condición if de prueba “distinta de cero”.