7

Ho una lista semplice.Comprensione delle liste con condizione

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

Voglio creare una nuova lista utilizzando una lista di comprensione.

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

Abbastanza semplice, ma che cosa se voglio operare solo su elementi diversi da zero?

'se' ha bisogno 'altro' nella comprensione delle liste, così mi è venuto in mente questo.

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

Ma il risultato auspicabile è.

>>> b 
[2, 4] 

posso farlo in questo modo

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

o utilizzando 'filtro' e un lambda

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

Come faccio a ottenere questo risultato utilizzando una lista di comprensione?

risposta

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

se si mette la condizione alla fine non è necessario un altro (infatti non si può avere un altro là) ​​

+0

Sei il mio eroe. =) – selurvedu

5

Seguendo il modello:

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

possiamo risolvere le cose come:

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

si tratta solo di formare una condizione if test su un valore "diverso da zero".

+0

Grazie per la risposta più dettagliata! – selurvedu

+0

bella accuratezza :) +1 –