2017-01-06 2 views
0

In meinem Code versuche ich, ein Aufzählungsobjekt durchzulaufen und selektiv einige Werte aus der Aufzählung mithilfe eines Listenverständnisses zu einer neuen Liste hinzuzufügen.Ternäroperator in Aufzählungsschleife

Dies funktioniert:

a = [1, 2, 3, 4, 5] 
s = [i[1] for i in enumerate(a)] 

Natürlich, das im Grunde nur Kopien Liste eines über s.

Dies funktioniert nicht (a die gleiche Liste ist):

s = [i[1] if i[1] != 2 for i in enumerate(a)] 

Ich würde denken, dass dies nur neben den 2 jedes Element Liste eines über s kopieren würde, aber stattdessen erhalte ich eine Syntax Error. Weiß jemand, was hier vor sich geht?

+2

Ternäre Operator 3 Operanden nimmt (es ist im Namen). Dein hat nur 2, also nein, das wird nicht funktionieren. –

+0

verschiebe das 'if' zum Ende des Verständnisses. –

+0

Python leidet hier etwas an der Überlastung der Schlüsselwörter. 'if' kann verwendet werden, um eine bedingte Anweisung (' if ... then ... elif ... else ') in einem Bedingungsausdruck '(a if b else c)' zu starten und den Filter in einem Generatorausdruck zu starten oder Listenverständnis ('[... für ... in ... falls ...]'). Jedes der drei Konstrukte ist unabhängig von den anderen, abgesehen von der Verwendung desselben Schlüsselworts. Ein paar ausführlichere Auswahlmöglichkeiten im Designprozess haben es möglicherweise weniger verwirrend gemacht: 'if ... then ... else ',' a when b another c' und '[... for ... in ... wann immer ...] '. – chepner

Antwort

0

Sie verlegt die if Teil:

s = [i[1] for i in enumerate(a) if i[1] != 2] 
Verwandte Themen