我有一个清单:
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)
Dav*_*zer 16
您可以这样就地执行此操作:
l = [1, 2, 3, 4, 5]
l[:] = [x * 5 for x in l]
Run Code Online (Sandbox Code Playgroud)
这不需要额外的进口,而且非常pythonic.
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_list来5的__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)
由于我认为你是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)