Python矩阵参数传递变异
有人能帮帮我吗! 我找不到错误的原因。如果我运行它一次,它工作正常,但是当我再次使用相同的参数调用相同的方法时,它会保留列表的最后一个会话,而我从未保存它。我尝试使用一个临时变量,但在运行一次之后,即使是临时变量也被修改了(:( 该算法是:Python矩阵参数传递变异,python,matrix,Python,Matrix,有人能帮帮我吗! 我找不到错误的原因。如果我运行它一次,它工作正常,但是当我再次使用相同的参数调用相同的方法时,它会保留列表的最后一个会话,而我从未保存它。我尝试使用一个临时变量,但在运行一次之后,即使是临时变量也被修改了(:( 该算法是: def searchin(position, mattwo): listpos = -1 indexone = -1 # - - - - - - for i in mattwo: listpos += 1
def searchin(position, mattwo):
listpos = -1
indexone = -1
# - - - - - -
for i in mattwo:
listpos += 1
for o in i:
if o == position:
indexone = i.index(o)
return listpos, indexone
def repos(reposition, listsone):
cero, replacement = searchin('0',listsone),searchin(reposition,listsone)
modded = listsone
modded[replacement[0]][replacement[1]],modded[cero[0]][cero[1]] = '0', reposition
mat = [['5','4','1'],
['0','6','8'],
['7','3','2']]
repos('5',mat)
repos('7',mat)
方法serachin()返回我们要查找的元素在矩阵3x3中的位置。工作正常没有错误
repos()方法就是问题所在。在我运行它之后,矩阵mat会随着上次运行的结果发生变化,但我从未保存它。您需要在
repos
中执行listone
的深度复制
将
从copy import deepcopy添加到文件顶部,然后将modded=listsone
更改为modded=deepcopy(listsone)
。在repos
函数末尾,返回modded
。调用repos
时,将返回值指定给一个变量。例如,changerepos('5',mat
tosome_variable=repos('5',mat)
您需要在repos
中执行listone
的深度复制
将从copy import deepcopy添加到文件顶部,然后将modded=listsone
更改为modded=deepcopy(listsone)
。在repos
函数末尾,返回modded
。调用repos
时,将返回值指定给一个变量。例如,changerepos('5',mat
tosome_variable=repos('5',mat)
from copy import deepcopy
def findpos(element, matrix):
ii = -1
jj = -1
for i in matrix:
ii += 1
for o in i:
if o == element:
jj = i.index(o)
return ii, jj
def switchmatrixelements(el1,el2, mat):
pos1 = findpos(el1,mat)
pos2 = findpos(el2,mat)
modded = deepcopy(mat)
modded[pos2[0]][pos2[1]] = el1
modded[pos1[0]][pos1[1]] = el2
return modded
mat = [['5','4','1'],
['0','6','8'],
['7','3','2']]
print mat
print switchmatrixelements('0','5',mat)
print switchmatrixelements('0','7',mat)
输出:
[['5', '4', '1'], ['0', '6', '8'], ['7', '3', '2']]
[['0', '4', '1'], ['5', '6', '8'], ['7', '3', '2']]
[['5', '4', '1'], ['7', '6', '8'], ['0', '3', '2']]
这就是你想做的吗
from copy import deepcopy
def findpos(element, matrix):
ii = -1
jj = -1
for i in matrix:
ii += 1
for o in i:
if o == element:
jj = i.index(o)
return ii, jj
def switchmatrixelements(el1,el2, mat):
pos1 = findpos(el1,mat)
pos2 = findpos(el2,mat)
modded = deepcopy(mat)
modded[pos2[0]][pos2[1]] = el1
modded[pos1[0]][pos1[1]] = el2
return modded
mat = [['5','4','1'],
['0','6','8'],
['7','3','2']]
print mat
print switchmatrixelements('0','5',mat)
print switchmatrixelements('0','7',mat)
输出:
[['5', '4', '1'], ['0', '6', '8'], ['7', '3', '2']]
[['0', '4', '1'], ['5', '6', '8'], ['7', '3', '2']]
[['5', '4', '1'], ['7', '6', '8'], ['0', '3', '2']]
错误是什么?你想做什么?我的意思是没有崩溃的错误,但是正在保存重新定位的矩阵,即使我在其他地方没有临时变量used@GiovannieSanchezDiaz函数的最后一行是pass
,这一事实非常清楚地表明您不知道自己在做什么但是,当你不知道自己在做什么时,你必须通过非常善于描述你正在尝试做的事情来弥补。现在,你的代码很糟糕,你对它应该做什么的描述也很糟糕。我没有遵循你的代码,只是想提醒一下,当你将temp
设置为mat
在mat
上进行一些更改也会更改temp
。如果要将初始值指定给临时值,请尝试temp=mat[:]
在mat
上的哪些更改将不会反映在temp
上。Dude那是一个崇高的文本自动添加它。错误是什么?你想做什么?我的意思是没有崩溃错误,但正在保存重新定位的矩阵,即使我在其他地方没有临时变量used@GiovannieSanchezDiaz您已通过pass
因为函数中的最后一行非常清楚地表明您不知道自己在做什么。这很好,但是当您不知道自己在做什么时,您必须通过非常擅长描述您正在尝试做的事情来弥补这一点。现在,您的代码很糟糕,您对它应该做什么的描述是错误的很糟糕。我没有遵循您的代码,只是想提醒您,当您将temp
设置为mat
时,对mat
进行一些更改也会更改temp
。如果您想将初始值指定给临时值,请尝试temp=mat[:]
在mat
上所做的更改不会反映在temp
上。这是一个很棒的文本自动添加工具的家伙,他会尝试一下!:)非常感谢。成功了!好的,会尝试一下!:)非常感谢。成功了!你的问题和我一样。第一次运行它做得很好,但在你的第二次运行的七应该在主矩阵的0。我用泰勒的答案解决了这个问题,但谢谢你的尝试:)说得好。我收回这句话,你需要一个deepcopy:)将编辑我的“解决方案”,但要归功于泰勒!你的问题和我一样。第一次运行它做得很好,但在你的第二次运行的七应该在主矩阵的0。我用泰勒的答案解决了这个问题,但谢谢你的尝试:)说得好。我收回这句话,你需要一个deepcopy:)将编辑我的“解决方案”,但要归功于泰勒!