Как я могу умножить каждый элемент в списке на число?
У меня есть список:
my_list = [1, 2, 3, 4, 5]
Как я могу умножить каждый элемент в my_list
на 5? Выход должен быть:
[5, 10, 15, 20, 25]
Ответы
Ответ 1
Вы можете просто использовать понимание списка:
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]
Обратите внимание, что понимание списка обычно является более эффективным способом выполнения цикла for
:
my_new_list = []
for i in my_list:
my_new_list.append(i * 5)
>>> print(my_new_list)
[5, 10, 15, 20, 25]
В качестве альтернативы, вот решение, использующее популярный пакет Pandas:
import pandas as pd
s = pd.Series(my_list)
>>> s * 5
0 5
1 10
2 15
3 20
4 25
dtype: int64
Или, если вам просто нужен список:
>>> (s * 5).tolist()
[5, 10, 15, 20, 25]
Ответ 2
Вы можете сделать это на месте так:
l = [1, 2, 3, 4, 5]
l[:] = [x * 5 for x in l]
Это не требует дополнительных импортов и очень pythonic.
Ответ 3
Чрезвычайно быстрый подход состоит в том, чтобы выполнять умножение в векторизованном виде вместо циклического перемещения по списку. Numpy уже предоставил очень простой и удобный способ для этого, который вы можете использовать.
>>> import numpy as np
>>>
>>> my_list = np.array([1, 2, 3, 4, 5])
>>>
>>> my_list * 5
array([ 5, 10, 15, 20, 25])
Обратите внимание, что это не работает с собственными списками Python. Если вы умножите число на список, оно будет повторять элементы размером с этот номер.
In [15]: my_list *= 1000
In [16]: len(my_list)
Out[16]: 5000
Если вам нужен чисто Python-ориентированный подход, использующий понимание списка, это, по сути, самый питонский способ.
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]
Помимо понимания списка, в качестве чисто функционального подхода вы также можете использовать встроенную функцию map()
следующим образом:
In [10]: list(map((5).__mul__, my_list))
Out[10]: [5, 10, 15, 20, 25]
Этот код передает все элементы в методе my_list
в метод 5
__mul__
и возвращает объект, похожий на итератор (в python-3.x). Затем вы можете преобразовать итератор в список, используя встроенную функцию list()
(в Python-2.x вам это не нужно, потому что map
возвращает список по умолчанию).
контрольные показатели:
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)
Ответ 4
Так как я думаю, что вы новичок в Python, давайте проделаем длинный путь, перейдем через ваш список, используя для цикла, и умножим и добавим каждый элемент в новый список.
используя для цикла
lst = [5, 20 ,15]
product = []
for i in lst:
product.append(i*5)
print product
используя понимание списка, это также так же, как использование for-loop, но более "pythonic"
lst = [5, 20 ,15]
prod = [i * 5 for i in lst]
print prod
Ответ 5
from functools import partial as p
from operator import mul
map(p(mul,5),my_list)
- это один из способов сделать это... ваш учитель, вероятно, знает гораздо менее сложный способ, который, вероятно, был рассмотрен в классе
Ответ 6
С картой (не так хорошо, но другой подход к проблеме):
list(map(lambda x: x*5,[5, 10, 15, 20, 25]))
Ответ 7
Лучший способ использовать понимание списка:
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))
Возвращает:
[-1, -2, -3]