Python数组清理问题

时间:2014-05-10 22:17:22

标签: python arrays variables

我有一个矩阵式数组,(假设)看起来像这样:

mat = [[0,2,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]
imat = mat
for i in xrange(4):
    for j in xrange(4):
        imat[j][i] = mat[i][j]
for i in xrange(4):
    for j in xrange(4):
        imat[j][i] = mat[i][j]

代码基本上将行/列从“mat”切换为“imat”。

结果: mat: [[0, 2, 0, 0], [2, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] imat: [[0, 2, 0, 0], [2, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

谁能告诉我为什么数组项目像这样重复?
此外,如果有更有效的方法来执行此操作,那也将受到赞赏。

2 个答案:

答案 0 :(得分:1)

问题出在这一行:

imat = mat

相反,你应该这样做,在开头分配一个新的4x4矩阵:

imat = [[0]*4 for _ in xrange(4)]

发生的事情是您没有正确初始化imat,您只分配了对mat的引用,因此两个对象都是同一个,因此不会进行任何修改。另外,转换矩阵的更简单的替代方法是:

imat = [list(m) for m in zip(*mat)]

答案 1 :(得分:1)

  

此外,如果有更有效的方法来执行此操作,那也将受到赞赏。

是的,它被称为矩阵transpose操作,在Python中使用内置函数zip()*-unpacking完成:

imat = zip(*mat)

至于为什么你当前的代码不起作用,@ÓscarLópez做对了,imat = mat没有创建矩阵的新副本。