如何将列表中的每个元素乘以数字?

时间:2016-02-03 00:54:04

标签: python list

我有一个清单:

my_list = [1, 2, 3, 4, 5]

如何将my_list中的每个元素乘以5?输出应为:

[5, 10, 15, 20, 25]

9 个答案:

答案 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