Quero comparar 2 iteráveis e imprimir os itens que aparecem em ambos os iteráveis.
>>> 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])
^
Mas isso me dá um erro de sintaxe inválida onde o ^
foi colocado. O que há de errado com essa função lamba?
python
if-statement
list-comprehension
OrangeTux
fonte
fonte
b = ('q')
não criam uma tupla. Tuplas com um elemento precisam de um explícito,
, ou sejab = ('q',)
tuples
paraiterables
.Respostas:
Você entendeu o pedido errado. O
if
deve ser após ofor
(a menos que seja em umif-else
operador ternário)No entanto, isso funcionaria:
fonte
Você coloca o
if
no final:As compreensões de lista são escritas na mesma ordem que suas contrapartes totalmente especificadas aninhadas, essencialmente a declaração acima se traduz em:
Em vez disso, sua versão tentou fazer isso:
mas uma compreensão de lista deve começar com pelo menos um loop externo.
fonte
fórmula de compreensão de lista:
portanto, você pode fazer assim:
Apenas para fins de demonstração: [y if y not in b else False for y in a]
fonte
else
em uma compreensão de lista, não onde você coloca, pelo menos. Não confunda a compreensão de uma lista (filtragem) com uma expressão condicional (que deve ter um valor, tornando a expressão else obrigatória).else
ser usado na compreensão da lista, embora conforme mostrado no código.Esta não é uma função lambda. É uma compreensão de lista.
Basta alterar a ordem:
fonte
Eu pesquisei e tentei as sugestões acima mencionadas de compreensão de lista para a minha situação, conforme descrito abaixo, mas não funcionou. O que eu estou fazendo errado aqui?
Não está filtrando as palavras.
fonte