2012-09-01 110 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