python - sumar - ¿Cómo multiplico cada elemento de una lista por un número?
sacar elementos de una lista python (7)
Con mapa (no tan bueno, pero otro enfoque del problema):
def timesfive(number): return number*5
list(map(timesfive,[5, 10, 15, 20, 25]))
Esta pregunta ya tiene una respuesta aquí:
Tengo una lista:
my_list = [1, 2, 3, 4, 5]
¿Cómo puedo multiplicar cada elemento en my_list
por 5? La salida debe ser:
[5, 10, 15, 20, 25]
Puedes hacerlo en el lugar así:
l = [1, 2, 3, 4, 5]
l[:] = [x * 5 for x in l]
Esto no requiere importaciones adicionales y es muy pythonic.
Puedes usar una lista de comprensión:
my_list = [1, 2, 3, 4, 5]
my_new_list = [i * 5 for i in my_list]
>>> print(my_new_list)
[5, 10, 15, 20, 25]
Tenga en cuenta que una comprensión de la lista es generalmente una forma más eficiente de hacer un bucle for
:
my_new_list = []
for i in my_list:
my_new_list.append(i * 5)
>>> print(my_new_list)
[5, 10, 15, 20, 25]
Como alternativa, aquí hay una solución que utiliza el popular paquete Pandas:
import pandas as pd
s = pd.Series(my_list)
>>> s * 5
0 5
1 10
2 15
3 20
4 25
dtype: int64
O, si solo quieres la lista:
>>> (s * 5).tolist()
[5, 10, 15, 20, 25]
Un enfoque increíblemente rápido es hacer la multiplicación de forma vectorializada en lugar de hacer un bucle en la lista. Numpy ya ha proporcionado una forma muy sencilla y práctica para esto que puede utilizar.
>>> import numpy as np
>>>
>>> my_list = np.array([1, 2, 3, 4, 5])
>>>
>>> my_list * 5
array([ 5, 10, 15, 20, 25])
Tenga en cuenta que esto no funciona con las listas nativas de Python. Si multiplica un número por una lista, repetirá los elementos del tamaño de ese número.
In [15]: my_list *= 1000
In [16]: len(my_list)
Out[16]: 5000
Si desea un enfoque basado en Python puro, usar una lista de comprensión es básicamente la forma más pitónica de hacerlo.
In [6]: my_list = [1, 2, 3, 4, 5]
In [7]: [5 * i for i in my_list]
Out[7]: [5, 10, 15, 20, 25]
Además de la comprensión de listas, como un enfoque funcional puro, también puede utilizar la función map()
incorporada de la siguiente manera:
In [10]: list(map((5).__mul__, my_list))
Out[10]: [5, 10, 15, 20, 25]
Este código pasa todos los elementos dentro de my_list
al método __mul__
5
y devuelve un objeto similar a un iterador (en python-3.x). Luego, puede convertir el iterador en una lista usando la función incorporada list()
(en pyhton-2.x no lo necesita porque el map
devuelve una lista de forma predeterminada).
puntos de referencia:
In [18]: %timeit [5 * i for i in my_list]
463 ns ± 10.6 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [19]: %timeit list(map((5).__mul__, my_list))
784 ns ± 10.7 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [20]: %timeit [5 * i for i in my_list * 100000]
20.8 ms ± 115 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
In [21]: %timeit list(map((5).__mul__, my_list * 100000))
30.6 ms ± 169 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
In [24]: arr = np.array(my_list * 100000)
In [25]: %timeit arr * 5
899 µs ± 4.98 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
Ya que creo que eres nuevo con Python, hagamos el camino largo, recorra en iteración su lista usando for loop y multiplique y agregue cada elemento a una nueva lista.
usando para bucle
lst = [5, 20 ,15]
product = []
for i in lst:
product.append(i*5)
print product
usando la comprensión de lista, esto es igual que usar for-loop pero más ''pythonic''
lst = [5, 20 ,15]
prod = [i * 5 for i in lst]
print prod
La mejor manera es usar la comprensión de la lista:
def map_to_list(my_list, n):
# multiply every value in my_list by n
# Use list comprehension!
my_new_list = [i * n for i in my_list]
return my_new_list
# To test:
print(map_to_list([1,2,3], -1))
Devoluciones: [-1, -2, -3]
from functools import partial as p
from operator import mul
map(p(mul,5),my_list)
es una forma en que podría hacerlo ... su profesor probablemente conoce una forma mucho menos complicada que probablemente se cubrió en clase