2024-04-25 14:13:57 发布
网友
我有一个清单:
my_list = [1, 2, 3, 4, 5]
如何将my_list中的每个元素乘以5?输出应为:
my_list
[5, 10, 15, 20, 25]
一种非常快速的方法是以矢量化的方式进行乘法,而不是在列表上循环。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()函数,如下所示:
map()
In [10]: list(map((5).__mul__, my_list)) Out[10]: [5, 10, 15, 20, 25]
此代码将my_list方法中的所有项传递给5的__mul__方法,并返回一个类似迭代器的对象(在python-3.x中)。然后,您可以使用内置函数list()将迭代器转换为list(在Python-2.x中,您不需要这样做,因为map默认返回一个list)。
5
__mul__
list()
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)
你可以使用列表理解:
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]
注意,列表理解通常是一种更有效的循环方式:
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]
你可以这样做:
l = [1, 2, 3, 4, 5] l[:] = [x * 5 for x in l]
这不需要额外的进口,是非常Python。
一种非常快速的方法是以矢量化的方式进行乘法,而不是在列表上循环。Numpy已经提供了一种非常简单和方便的方法,您可以使用它。
注意,这不适用于Python的本地列表。如果您将一个数字与一个列表相乘,它将重复该数字的大小。
如果你想要一个纯粹的基于Python的方法,使用列表理解基本上是最Python的方法。
除了列表理解,作为一种纯函数方法,您还可以使用内置的
map()
函数,如下所示:此代码将
my_list
方法中的所有项传递给5
的__mul__
方法,并返回一个类似迭代器的对象(在python-3.x中)。然后,您可以使用内置函数list()
将迭代器转换为list(在Python-2.x中,您不需要这样做,因为map
默认返回一个list)。基准:
你可以使用列表理解:
注意,列表理解通常是一种更有效的循环方式:
作为替代方案,这里有一个使用流行的Pandas包的解决方案:
或者,如果你只是想要这个列表:
你可以这样做:
这不需要额外的进口,是非常Python。
相关问题 更多 >
编程相关推荐