簡體   English   中英

如何將列表中的每個元素乘以一個數字?

[英]How do I multiply each element in a list by a number?

我有一個清單:

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

如何將my_list中的每個元素乘以 5? output 應該是:

[5, 10, 15, 20, 25]

您可以只使用列表理解

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]

一種極快的方法是以向量化的方式進行乘法運算,而不是遍歷列表。 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 中)。 然后,您可以使用內置函數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)

你可以像這樣就地做:

 l = [1, 2, 3, 4, 5]
 l[:] = [x * 5 for x in l]

這不需要額外的導入並且非常pythonic。

因為我認為您是 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

使用地圖(不太好,但問題的另一種方法):

list(map(lambda x: x*5,[5, 10, 15, 20, 25]))

此外,如果您碰巧使用 numpy 或 numpy 數組,則可以使用以下命令:

import numpy as np
list(np.array(x) * 5)
from functools import partial as p
from operator import mul
map(p(mul,5),my_list)

是你可以做到的一種方法......你的老師可能知道一種可能在課堂上講過的簡單得多的方法

my_list的每個元素乘以k

k = 5
my_list = [1,2,3,4]
result = list(map(lambda x: x * k, my_list))

結果: [5, 10, 15, 20]

我發現僅使用一個對象名稱 x 使用列表推導式或映射很有趣。 請注意,無論何時重新分配 x ,其 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
var1 = [2,4,6,8,10,12]

#for Integer multiplier us   int(x).__mull__ with map    
var2 = list( map(int(2).__mul__,var1 ))
#for float multiplier
var2 = list( map(float(2.5).__mul__,var1 ))

最好的方法是使用列表理解:

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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM