如何将列表中的每个元素乘以数字?

DJ *_*awg 62 python list

我有一个清单:

my_list = [1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

如何将每个元素乘以my_list5?输出应该是:

[5, 10, 15, 20, 25]
Run Code Online (Sandbox Code Playgroud)

Ale*_*der 95

你可以使用列表理解:

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]
Run Code Online (Sandbox Code Playgroud)

请注意,列表推导通常是一种更有效的for循环方式:

my_new_list = []
for i in my_list:
    my_new_list.append(i * 5)

>>> print(my_new_list)
[5, 10, 15, 20, 25]
Run Code Online (Sandbox Code Playgroud)

作为替代方案,这里有一个使用流行的Pandas包的解决方案:

import pandas as pd

s = pd.Series(my_list)

>>> s * 5
0     5
1    10
2    15
3    20
4    25
dtype: int64
Run Code Online (Sandbox Code Playgroud)

或者,如果您只是想要列表:

>>> (s * 5).tolist()
[5, 10, 15, 20, 25]
Run Code Online (Sandbox Code Playgroud)

  • 也不鼓励使用'l'作为变量,因为字母'l'和数字1很容易混淆.我在OP的原始问题中使用了变量,我相信你对这个问题的编辑弊大于利. (3认同)

Dav*_*zer 16

您可以这样就地执行此操作:

 l = [1, 2, 3, 4, 5]
 l[:] = [x * 5 for x in l]
Run Code Online (Sandbox Code Playgroud)

这不需要额外的进口,而且非常pythonic.

  • 我宁愿 `l = [x * 5 for x in l]` 而不是 `l[:] = [x * 5 for x in l]`。后者创建一个新列表,然后使用它来覆盖“l”的内容,而不是仅仅重新分配引用,这样更便宜。如果您确实担心空间,只需使用循环进行迭代并就地变异即可。 (2认同)

Kas*_*mvd 15

一种极快的方法是以矢量化方式进行乘法,而不是循环遍历列表.Numpy已经为您提供了一个非常简单方便的方法.

>>> import numpy as np
>>> 
>>> my_list = np.array([1, 2, 3, 4, 5])
>>> 
>>> my_list * 5
array([ 5, 10, 15, 20, 25])
Run Code Online (Sandbox Code Playgroud)

请注意,这不适用于Python的本机列表.如果将数字与列表相乘,则会重复该数字的大小.

In [15]: my_list *= 1000

In [16]: len(my_list)
Out[16]: 5000
Run Code Online (Sandbox Code Playgroud)

如果你想要一个纯粹的基于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]
Run Code Online (Sandbox Code Playgroud)

除了列表理解之外,作为一种纯函数式方法,您还可以使用内置map()函数,如下所示:

In [10]: list(map((5).__mul__, my_list))
Out[10]: [5, 10, 15, 20, 25]
Run Code Online (Sandbox Code Playgroud)

此代码经过内的所有项目my_list5__mul__方法并返回迭代状物体(在python-3.X).然后,您可以使用list()内置函数将迭代器转换为列表(在pyhton-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)
Run Code Online (Sandbox Code Playgroud)


was*_*898 6

由于我认为你是Python新手,让我们做很多事情,使用for循环遍历你的列表并乘以并将每个元素附加到一个新列表.

用于循环

lst = [5, 20 ,15]
product = []
for i in lst:
    product.append(i*5)
print product
Run Code Online (Sandbox Code Playgroud)

使用列表理解,这也与使用for-loop相同,但更多'pythonic'

lst = [5, 20 ,15]

prod = [i * 5 for i in lst]
print prod
Run Code Online (Sandbox Code Playgroud)