Как я могу умножить каждый элемент в списке на число?

У меня есть список:

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]