Ich möchte 2 Iterables vergleichen und die Elemente drucken, die in beiden Iterables erscheinen.
>>> 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])
^
Aber es gibt mir einen ungültigen Syntaxfehler, wo der ^
platziert wurde. Was ist falsch an dieser Lamba-Funktion?
python
if-statement
list-comprehension
OrangeTux
quelle
quelle
b = ('q')
erzeugen aber auch kein Tupel. Tupel mit einem Element benötigen eine explizite,
, das heißtb = ('q',)
tuples
initerables
.Antworten:
Du hast die Bestellung falsch verstanden. Das
if
sollte nach dem seinfor
(es sei denn, es ist in einemif-else
ternären Operator)Dies würde jedoch funktionieren:
quelle
Sie setzen das
if
am Ende:Listenverständnisse werden in derselben Reihenfolge geschrieben wie ihre verschachtelten, vollständig spezifizierten Gegenstücke. Die obige Aussage bedeutet im Wesentlichen:
Ihre Version hat stattdessen versucht, dies zu tun:
Ein Listenverständnis muss jedoch mit mindestens einer äußeren Schleife beginnen.
quelle
Listenverständnisformel:
So können Sie es machen:
Nur zu Demonstrationszwecken: [y wenn y nicht in b sonst Falsch für y in a]
quelle
else
ein Listenverständnis nicht einfügen, nicht mindestens dort, wo Sie es eingefügt haben. Verwechseln Sie ein Listenverständnis (Filtern) nicht mit einem bedingten Ausdruck (der einen Wert haben muss, sodass der else-Ausdruck obligatorisch ist).else
für das Listenverständnis verwendet werden, wie im Code gezeigt.Dies ist keine Lambda-Funktion. Es ist ein Listenverständnis.
Ändern Sie einfach die Reihenfolge:
quelle
Ich habe die oben genannten Vorschläge zum Listenverständnis für meine Situation wie unten beschrieben recherchiert und ausprobiert, aber es hat nicht funktioniert. Was mache ich hier falsch?
Es filtert nicht die Wörter.
quelle