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 sintaxis no válido donde ^
se ha colocado. ¿Qué tiene de malo esta función lamba?
python
if-statement
list-comprehension
OrangeTux
fuente
fuente
b = ('q')
tampoco crean una tupla. Las tuplas con un elemento necesitan un elemento explícito,
, es decirb = ('q',)
tuples
aiterables
.Respuestas:
Te equivocaste en el pedido. El
if
debería haber después de lafor
(a menos que sea en unif-else
operador ternario)Sin embargo, esto funcionaría:
fuente
Pones el
if
al final:Las listas por comprensión se escriben en el mismo orden que sus contrapartes anidadas de especificación completa, esencialmente la declaración anterior se traduce en:
Su versión intentó hacer esto en su lugar:
pero la comprensión de una lista debe comenzar con al menos un bucle externo.
fuente
lista de fórmula de comprensión:
así puedes hacerlo así:
Solo para fines de demostración: [y si y no en b, de lo contrario, es falso para y en a]
fuente
else
comprensión en una lista, al menos no donde se pone una. No confunda una comprensión de lista (filtrado) con una expresión condicional (que debe tener un valor, por lo que la expresión else es obligatoria).else
utilizarse en la comprensión de listas, como se muestra en el código.Esta no es una función lambda. Es una lista de comprensión.
Simplemente cambie el orden:
fuente
Investigué y probé las sugerencias mencionadas anteriormente de comprensión de listas para mi situación, como se describe a continuación, sin embargo, no funcionó. ¿Qué estoy haciendo mal aquí?
No está filtrando las palabras.
fuente