所以我试图制作一个有趣的决定性函数,但我遇到了代码特定部分的问题。它发生在创建子矩阵期间。我的意思是,通过从旧的矩阵中删除一列和一行来创建一个新的矩阵 即 来自:
a = [[1,2,3],[4,5,6],[7,8,9]]
到suba矩阵,表示删除了col1和row1:
suba = [[5,6],[8,9]]
我要做的是使用for循环打印出相同原始矩阵的3个子矩阵,但每次运行该函数时,它都会用子矩阵替换原始矩阵。
我的代码是:
a = [[1,2,3],[4,5,6],[7,8,9]]
def submatrix(mat,row,col):
'''
Creates the smaller matrix by removing column and row of element.
e.g. to remove the 1st column and row from matrix: M = [[1,2,3],[4,5,6],[7,8,9]]
type: submatrix[M,1,1]
'''
temp = mat
if len(mat) == 2:
return mat
elif len(mat) == 1:
return mat
else:
for i in range(len(mat)):
del temp[i][col-1]
del temp[row-1]
return temp
for e in range(len(a)):
print submatrix(a,1,e+1)
我想要它做的是打印出类似的东西:
[[5, 6], [8, 9]]
[[4, 6], [7, 9]]
[[4, 5], [7, 8]]
但打印出来的是:
[[5, 6], [8, 9]]
[[5, 6], [8, 9]]
[[5, 6], [8, 9]]
如果我要说,打印一个,现在就是这个子矩阵。 我该如何解决这个问题?
答案 0 :(得分:1)
使用copy
模块,在代码的第一行导入:
import copy
然后在submatrix
函数中,更改此行:
temp = mat
到
temp = copy.deepcopy(mat)
答案 1 :(得分:0)
问题在于temp = mat
,temp
指向与mat
完全相同的对象,因此当您通过删除行和列修改temp
时,您也是修改函数内部和外部的原始mat
矩阵。
要防止出现这种情况,您需要使用copy.deepcopy
或(专门用于复制列表列表)通过temp = map(list, mat)
创建矩阵的深层副本。这将使temp
成为新矩阵(也称为列表列表),并保留从原始矩阵中的行创建的新列表。