Listar la comprensión con la instrucción if

Quiero comparar 2 iterables e imprimir los elementos que aparecen en ambos iterables.

>>> a = ('q', 'r') >>> b = ('q') # Iterate over a. If y not in b, print y. # I want to see ['r'] printed. >>> print([ y if y not in b for y in a]) ^ 

Pero me da un error de syntax no válido donde se ha colocado el ^ . ¿Qué hay de malo en esta función lamba?

Tienes mal la orden El if debe estar detrás del for (a menos que esté en un operador ternario if-else )

 [y for y in a if y not in b] 

Esto funcionaría sin embargo:

 [y if y not in b else other_value for y in a] 

Pones el if al final:

 [y for y in a if y not in b] 

Las comprensiones de listas se escriben en el mismo orden que sus contrapartes especificadas completas anidadas, esencialmente la statement anterior se traduce a:

 outputlist = [] for y in a: if y not in b: outputlist.append(y) 

Tu versión intentó hacer esto en su lugar:

 outputlist = [] if y not in b: for y in a: outputlist.append(y) 

pero una lista de comprensión debe comenzar con al menos un bucle externo.

Esta no es una función lambda. Es una lista de comprensión.

Solo cambia el orden:

 [ y for y in a if y not in b] 

lista de fórmula de comprensión:

 [ if  else  for value in list_name] 

Así puedes hacerlo así:

 [y for y in a if y not in b] 

Solo para fines de demostración: [y si y no en b else Falso para y en a]