我有一个清单:
my_list = [1, 2, 3, 4, 5]
如何将my_list
中的每个元素乘以5?输出应为:
[5, 10, 15, 20, 25]
答案 0 :(得分:70)
你可以使用列表理解:
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]
答案 1 :(得分:11)
你可以这样就地做到:
l = [1, 2, 3, 4, 5]
l[:] = [x * 5 for x in l]
这不需要额外的进口,而且非常pythonic。
答案 2 :(得分:9)
一种超快速的方法是以矢量化方式进行乘法,而不是循环遍历列表。 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的方法,使用列表理解基本上是最恐怖的方式。
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
的{{1}}方法,并返回类似迭代器的对象(在python-3.x中)。然后,您可以使用内置函数__mul__
将迭代器转换为列表(在pyhton-2.x中,您不需要它,因为list()
默认返回列表。)
map
答案 3 :(得分:6)
由于我认为你是Python的新手,让我们做很多事情,使用for循环遍历你的列表并乘以并将每个元素附加到一个新列表。
使用for循环
lst = [5, 20 ,15]
product = []
for i in lst:
product.append(i*5)
print product
使用列表理解,这也与使用for-loop相同,但更多'pythonic'
lst = [5, 20 ,15]
prod = [i * 5 for i in lst]
print prod
答案 4 :(得分:2)
from functools import partial as p
from operator import mul
map(p(mul,5),my_list)
是你可以做到的一种方式......你的老师可能知道一种少得多的复杂方式,可能在课堂上有所涉及
答案 5 :(得分:1)
使用地图(不是很好,但问题的另一种方法):
list(map(lambda x: x*5,[5, 10, 15, 20, 25]))
答案 6 :(得分:1)
将my_list
中的每个元素乘以k
:
k = 5
my_list = [1,2,3,4]
result = list(map(lambda x: x * k, my_list))
结果:[5, 10, 15, 20]
答案 7 :(得分:0)
最好的方法是使用列表理解:
def map_to_list(my_list, n):
# multiply every value in my_list by n
# Use list comprehension!
my_new_list = [i * n for i in my_list]
return my_new_list
# To test:
print(map_to_list([1,2,3], -1))
返回: [-1,-2,-3]
答案 8 :(得分:0)
我发现仅使用一个对象名称x使用列表推导或映射很有趣。 请注意,每当x is reassigned时,其id(x)都会改变,即指向另一个对象。
x = [1, 2, 3]
id(x)
2707834975552
x = [1.5 * x for x in x]
id(x)
2707834976576
x
[1.5, 3.0, 4.5]
list(map(lambda x : 2 * x / 3, x))
[1.0, 2.0, 3.0]
id(x) # not reassigned
2707834976576
x = list(map(lambda x : 2 * x / 3, x))
x
[1.0, 2.0, 3.0]
id(x)
2707834980928