给出两个数组:
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]]
请帮忙。
答案 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]。