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
时,将返回值指定给一个变量。例如,change
repos('5',mat
to
some_variable=repos('5',mat)

您需要在
repos
中执行
listone
的深度复制


从copy import deepcopy添加到文件顶部,然后将
modded=listsone
更改为
modded=deepcopy(listsone)
。在
repos
函数末尾,返回
modded
。调用
repos
时,将返回值指定给一个变量。例如,change
repos('5',mat
to
some_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:)将编辑我的“解决方案”,但要归功于泰勒!