2011-12-16 8 views
6

persone,modifica l'elemento dell'elenco con la comprensione dell'elenco in python

Desidero modificare l'elemento dell'elenco con la comprensione dell'elenco. Ad esempio, se l'elemento è negativo, aggiungi 4 ad esso.

Così la lista

a = [1, -2 , 2] 

verrà convertito in

a = [1, 2, 2] 

Il seguente codice funziona, ma mi chiedo se c'è un modo migliore per farlo?

Grazie.

for i in range(len(a)): 
    if a[i]<0: 
     a[i] += 4 

risposta

11
a = [b + 4 if b < 0 else b for b in a] 
+2

se la lista a è molto grande, sarebbe questo causa problemi di memoria modo? – nos

+0

Non lo so. Immagino che questo crei una nuova lista che deve essere immagazzinata da qualche parte prima di essere copiata su a, quindi probabilmente. – BenH

+2

A meno che non si sappia che il set di dati sarà enorme *, non mi preoccuperei troppo di questo ... Inoltre, le espressioni generatrici possono fare molto per risolvere tali problemi (non in questo caso però). –

1

Perché mutare, quando è possibile restituire una nuova lista che sembra che tu voglia?

[4 + x if x < 0 else x for x in [1, -2, 2]] 
3

Questa versione è più vecchio, che avrebbe funzionato su Python 2,4

>>> [x < 0 and x + 4 or x for x in [1, -2, 2]] 
0: [1, 2, 2] 

Per le versioni più recenti di Python utilizzare conditional expressions come in Adam Wagner o Benh risponde

2

Prova questa:

b = [x + 4 if x < 0 else x for x in a] 

O se ti piace di più map di una lista di comprensione:

b = map(lambda x: x + 4 if x < 0 else x, a) 
6

Se si desidera modificare l'elenco sul posto, questo è quasi il modo migliore. La comprensione delle liste creerà una nuova lista. Si potrebbe anche usare enumerate, e l'assegnazione deve essere fatto per a[i]:

for i, x in enumerate(a): 
    if x < 0: 
    a[i] = x + 4 
Problemi correlati