我有一个清单:
my_list = [1, 2, 3, 4, 5]
如何将my_list
中的每个元素乘以5?输出应为:
[5, 10, 15, 20, 25]
发布于 2016-02-03 09:02:42
您可以只使用list comprehension
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]
发布于 2016-02-03 13:56:55
一种速度快得多的方法是以向量化的方式进行乘法,而不是遍历列表。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的方法,那么使用列表理解基本上是最具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)
发布于 2016-02-03 08:58:08
您可以按如下方式就地完成:
l = [1, 2, 3, 4, 5]
l[:] = [x * 5 for x in l]
这不需要额外的导入,而且非常简单。
https://stackoverflow.com/questions/35166633
复制相似问题