将数组中的元素与另一个提升为幂的数组相乘

时间:2015-03-11 23:21:48

标签: python arrays

给出两个数组:

x=[1,2,3]
y=[1,2,3]

我想将数组y中的每个元素乘以数组x,数组x中的元素根据y中元素的顺序提升到幂。

例如,数组y中的第一个元素是1,它的顺序是0。然后将数组x中的每个元素提升到0的幂,然后乘以1的元素。 数组y中的第二个元素是2,它的顺序是第1个。数组x中的每个元素都被提升到1的幂,然后乘以2的元素,等等。 我尝试了以下代码:

B=[]
C=[]

for i in arange(len(y)):
    for j in arange(len(x)):
         b=y[i]*x[j]**i
         B.append(b)
    C.append(B)
print C

然而它给了:

[[1, 1, 1, 2, 4, 6, 3, 12, 27], [1, 1, 1, 2, 4, 6, 3, 12, 27], [1, 1, 1, 2, 4, 6, 3, 12, 27]]

而不是:

[[1,1,1,],[2,4,6], [3,12,27]]

请帮忙。

3 个答案:

答案 0 :(得分:1)

这是一个使用列表推导的单行版本:

x = [1,2,3]
y = [1,2,3]
print [[vy * (vx**iy) for ix, vx in enumerate(x)] for iy, vy in enumerate(y)]

结果:

[[1, 1, 1], [2, 4, 6], [3, 12, 27]]

答案 1 :(得分:0)

您有缩进问题:

C=[]

x=[1,2,3]
y=[1,2,3]

for i in range(0, len(y)):
    B = list()
    for j in range(0, len(x)):
        b=y[i]*(x[j]**i)
        B.append(b)
    C.append(B)
print C

这应该解决它。

答案 2 :(得分:0)

除了(现在已修复)缩进问题外,您必须在外循环的每次迭代中重新初始化B.另外,附加B [:],而不是B.这样每次都可以复制,而不是一遍又一遍地添加相同的列表。

python中的列表与字符串或整数的行为方式略有不同。例如,如果您执行此代码:

A=[2]
B=A
A.append(3)
print(B)

将打印出[2,3]。 如果你写B=A[:],python会复制A列表,输出只是[2]。