2012-09-01 116 views
1

如果我有一個一維陣列中的Python例如:乘法1D陣列在Python

a = (10,20,30,40,50) 

如何可以乘以這個由例如2的整數,以產生:

b = (20,40,60,80,100) 

我試圖:

b = a*2 

但它似乎沒有做任何事情。

+0

'一* 2'並做_something:_'(10,20,30,40,50,10,20,30,40,50)' –

回答

3

使用以下:

>>> b = [2 * i for i in a] 
>>> b 
[20, 40, 60, 80, 100] 

a * 2都會複製您的設置:

>>> a = (10,20,30,40,50) 
>>> a * 2 
(10, 20, 30, 40, 50, 10, 20, 30, 40, 50) 
+0

謝謝,這工作! – cia09mn

+0

@ cia09mn歡迎來到SO。由於此答案適合您,請點擊綠色複選標記將其標記爲已接受。 –

+0

對不起,沒有意識到,謝謝 – cia09mn

3

元組是不可變的;如果您要更改實際數組的內容,請使用列表([]而不是())。

爲了使具有元件兩次那些元組的,環上的元組的新的列表和相乘的每個元素:

b = [] 
for num in a: 
    b.append(2*num) 

這可以使用list comprehensions縮短到

b = [2*num for num in a] 

請注意,如果你真的想最後的結果仍然是一個元組,你可以使用使用

b = tuple([2*num for num in a]) 

我相信你能得到你原來的語法,而無需使用第三方庫將

最接近
>>> map(lambda n: n*2, [1,2,3]) 
[2, 4, 6] 

這基本上是說,「走功能f(n) = 2n,如果應用到列表[1,2,3]」的這樣一種有趣的方式。

+0

元組不是這裏的問題。使用列表而不是元組的最終結果在元素方面是相同的:'[10,20,30,40,50,10,20,30,40,50]'。 -1 –

+0

@MattBall完全正確。 (我點擊提交之前,我的回答已經足夠。) –

+1

地圖功能不修改列表,它只是返回一個新的。 – MatthieuW

3

對於數字打交道的更自然的方式,你可能要考慮numpy。 使用numpy的,你的代碼會喜歡這樣:

import numpy as np 
a = np.array([10,20,30,40,50]) 
b = a*2