7

Ich habe eine einfache Liste.List Verständnis mit der Bedingung

>>> a = [0, 1, 2] 

Ich möchte eine neue Liste daraus mit einem Listenverständnis machen.

>>> b = [x*2 for x in a] 
>>> b 
[0, 2, 4] 

Ziemlich einfach, aber was, wenn ich nur über Nicht-Null-Elemente arbeiten möchte?

'if' braucht 'else' in der Liste Comprehensions, so kam ich mit diesem.

>>> b = [x*2 if x != 0 else None for x in a] 
>>> b 
[None, 2, 4] 

Aber das wünschenswerte Ergebnis ist.

>>> b 
[2, 4] 

Ich kann tun, dass diese Art und Weise

>>> a = [0, 1, 2] 
>>> def f(arg): 
...  for x in arg: 
...   if x != 0: 
...    yield x*2 
... 
>>> list(f(a)) 
[2, 4] 

oder mit 'Filter' und eine Lambda-

>>> a = [0, 1, 2] 
>>> list(filter(lambda x: x != 0, a)) 
[1, 2] 

Wie kann ich dieses Ergebnis erhalten Sie eine Liste Verständnis mit?

Antwort

12
b = [x*2 for x in a if x != 0] 

, wenn Sie Ihren Zustand am Ende setzen Sie brauchen nicht ein anderes (infact kann kein anderes da haben)

+0

Du bist mein Held. =) – selurvedu

5

dem Muster folgend:

[ <item_expression> 
    for <item_variables> in <iterator> 
    if <filtering_condition> 
] 

wir es mögen lösen können:

>>> lst = [0, 1, 2] 
>>> [num 
... for num in lst 
... if num != 0] 
[1, 2] 

Es geht darum, einen if-Bedingungstest "ungleich Null" zu erstellen.

+0

Danke für die ausführlichere Antwort! – selurvedu

+0

nette Gründlichkeit :) +1 –

Verwandte Themen