Chcę porównać 2 iterowalne i wydrukować elementy, które pojawiają się w obu iterowalnych.
>>> 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])
^
Ale daje mi nieprawidłowy błąd składni, w którym ^
został umieszczony. Co jest nie tak z tą funkcją Lamba?
python
if-statement
list-comprehension
OrangeTux
źródło
źródło
b = ('q')
nie tworzą też krotki. Krotki z jednym elementem wymagają jawnego,
, czylib = ('q',)
tuples
witerables
.Odpowiedzi:
Złe zamówienie.
if
Powinny być pofor
(chyba, że jest wif-else
operator potrójnego)To jednak zadziała:
źródło
Umieszczasz
if
na końcu:Listy składane są zapisywane w tej samej kolejności, co ich zagnieżdżone, w pełni określone odpowiedniki, zasadniczo powyższe stwierdzenie przekłada się na:
Twoja wersja próbowała to zrobić zamiast tego:
ale rozumienie listy musi zaczynać się przynajmniej jedną zewnętrzną pętlą.
źródło
Formuła rozumienia listy:
więc możesz to zrobić w ten sposób:
Tylko do celów demonstracyjnych: [y jeśli y nie w b else Fałsz dla y in a]
źródło
else
na liście, a nie tam, gdzie umieścisz przynajmniej jedno. Nie należy mylić rozumienia listy (filtrowania) z wyrażeniem warunkowym (które musi mieć wartość, co oznacza, że wyrażenie else jest obowiązkowe).else
być używane w zrozumieniu list, jak pokazano w kodzie.To nie jest funkcja lambda. To jest zrozumienie listy.
Po prostu zmień kolejność:
źródło
Zbadałem i wypróbowałem wyżej wymienione sugestie dotyczące zrozumienia listy dla mojej sytuacji, jak opisano poniżej, ale nie zadziałało. Co ja tu robię źle?
To nie jest filtrowanie słów.
źródło