2011-12-16 49 views
6

personas,modificar elemento de lista con comprensión de lista en python

Quiero modificar elemento de lista con comprensión de lista. Por ejemplo, si el elemento es negativo, sume 4.

Así, la lista de

a = [1, -2 , 2] 

se convertirá en

a = [1, 2, 2] 

El siguiente código funciona, pero me pregunto si hay una mejor manera de hacerlo?

Gracias.

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

Respuesta

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

si la lista a es muy grande, sería este modo en problemas de memoria causa? – nos

+0

No lo sé. Supongo que esto crea una nueva lista que debe almacenarse en algún lugar antes de que se copie en a, así que probablemente. – BenH

+2

A menos que sepa que el conjunto de datos va a ser * enorme *, no me preocuparía demasiado por eso ... Además, las expresiones de generador pueden ser de gran ayuda para resolver estos problemas (aunque en este caso no). –

1

¿Por qué mutar, cuando puede simplemente devolver una nueva lista que parece que usted quiere?

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

Esta versión es más antigua, que funcionaría en Python 2,4

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

hay nuevas versiones de Python utilizar conditional expressions así como en Adán Wagner o Bệnh respuestas

2

Prueba esto:

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

O si te gusta map más de una lista por comprensión:

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

Si desea cambiar la lista en el lugar, esto es casi la mejor manera. La comprensión de la lista creará una nueva lista. También es posible usar enumerate, y la asignación se debe hacer para a[i]:

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