我有一个清单:
my_list = [1, 2, 3, 4, 5]
如何将 my_list
中的每个元素乘以 5?输出应该是:
[5, 10, 15, 20, 25]
原文由 DJ bigdawg 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有一个清单:
my_list = [1, 2, 3, 4, 5]
如何将 my_list
中的每个元素乘以 5?输出应该是:
[5, 10, 15, 20, 25]
原文由 DJ bigdawg 发布,翻译遵循 CC BY-SA 4.0 许可协议
一种速度非常快的方法是以向量化方式进行乘法运算,而不是循环遍历列表。 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 的方法,使用列表理解基本上是最 Pythonic 的方法。
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 的迭代器对象(in)。然后,您可以使用 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)
原文由 Mazdak 发布,翻译遵循 CC BY-SA 4.0 许可协议
4 回答4.4k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
1 回答4.4k 阅读✓ 已解决
1 回答3.8k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
2 回答2k 阅读✓ 已解决
您可以只使用 列表理解:
请注意,列表理解通常是执行
for
循环的更有效方法:作为替代方案,这是使用流行的 Pandas 包的解决方案:
或者,如果您只想要列表:
最后, 可以 使用
map
,尽管这通常不被接受。但是,使用
map
通常效率较低。根据 ShadowRanger 对此问题已删除答案的评论:他的另一条评论发布 到此回复: