Lista de comprensión de Python – simple

Tengo una lista y quiero usar una función determinada solo en aquellas entradas que cumplan con una determinada condición, dejando las otras entradas sin modificar.

Ejemplo: Digamos que quiero multiplicar por 2 solo aquellos elementos que son pares.

a_list = [1, 2, 3, 4, 5] 

Resultado deseado:

 a_list => [1, 4, 3, 8, 5] 

Pero [elem * 2 for elem in a_list if elem %2 == 0] produce [4, 8] (además actuó como filtro).

¿Cuál es la forma correcta de hacerlo?

Related of "Lista de comprensión de Python – simple"

Usa una expresión condicional :

 [x * 2 if x % 2 == 0 else x for x in a_list] 

(Nota de Math Geek: también puedes resolver este caso en particular con

 [x * (2 - x % 2) for x in a_list] 

pero prefiero la primera opción de todos modos;)

 a_list = [1, 2, 3, 4, 5] print [elem*2 if elem%2==0 else elem for elem in a_list ] 

o, si tiene una lista muy larga que desea modificar en su lugar:

 a_list = [1, 2, 3, 4, 5] for i,elem in enumerate(a_list): if elem%2==0: a_list[i] = elem*2 

Así, solo se modifican los elementos pares.

Podrías usar lambda:

 >>> a_list = [1, 2, 3, 4, 5] >>> f = lambda x: x%2 and x or x*2 >>> a_list = [f(i) for i in a_list] >>> a_list [1, 4, 3, 8, 5] 

Editar : pensando en el comentario de agf , hice una segunda versión de mi código:

 >>> a_list = [1, 2, 3, 4, 5] >>> f = lambda x: x if x%2 else x*2 >>> a_list = [f(i) for i in a_list] >>> a_list [1, 4, 3, 8, 5]