给定两个数组:
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]]
请帮帮忙。
发布于 2015-03-12 07:28:46
下面是一个使用列表理解的单行版本:
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]]
发布于 2015-03-12 07:26:50
您遇到了缩进问题:
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
这个应该可以解决这个问题。
发布于 2015-03-12 07:34:45
除了(现在已修复)缩进问题外,您还必须在外部循环的每次迭代中重新初始化B。另外,附加B,而不是B。这样,您每次都会制作副本,而不是一遍又一遍地追加相同的列表。
python中的列表与字符串或整数的行为方式略有不同。例如,如果您执行以下代码:
A=[2]
B=A
A.append(3)
print(B)
如果你写的是B=A[:]
,python将复制A列表,输出将只有2。
https://stackoverflow.com/questions/28999252
复制相似问题