Je veux comparer 2 itérables et imprimer les éléments qui apparaissent dans les deux itérables.
>>> 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])
^
Mais cela me donne une erreur de syntaxe invalide où le ^
a été placé. Quel est le problème avec cette fonction lamba?
python
if-statement
list-comprehension
OrangeTux
la source
la source
b = ('q')
ne crée pas non plus de tuple. Les tuples avec un élément ont besoin d'un explicite,
, c'est-à-direb = ('q',)
tuples
eniterables
.Réponses:
Vous avez mal reçu la commande. Le
if
devrait être après lefor
(sauf s'il s'agit d'unif-else
opérateur ternaire)Cela fonctionnerait cependant:
la source
Vous mettez le
if
à la fin:Les compréhensions de liste sont écrites dans le même ordre que leurs équivalents imbriqués entièrement spécifiés, essentiellement l'instruction ci-dessus se traduit par:
Votre version a essayé de le faire à la place:
mais une compréhension de liste doit commencer par au moins une boucle externe.
la source
formule de compréhension de liste:
ainsi vous pouvez le faire comme ceci:
Uniquement à des fins de démonstration: [y if y not in b else False for y in a]
la source
else
dans une liste de compréhension, pas là où vous en mettez un au moins. Ne confondez pas une compréhension de liste (filtrage) avec une expression conditionnelle (qui doit avoir une valeur, rendant l'expression else obligatoire).else
être utilisé dans la compréhension de la liste comme indiqué dans le code.Ce n'est pas une fonction lambda. C'est une compréhension de liste.
Changez simplement l'ordre:
la source
J'ai recherché et essayé les suggestions ci-dessus de compréhension de liste pour ma situation comme décrit ci-dessous, mais cela n'a pas fonctionné. Qu'est-ce que je fais de mal ici?
Ce n'est pas filtrer les mots.
la source