所以,在我的课程中,我有一个"主要" function,它改变给定矩阵的两个元素。矩阵是列表的一个元素(在示例中,列表是变量solved
),然后我想追加三个新元素。
def main(matrix,direction):
index16 = indexOf(16,matrix)
matrix[index16[0]][index16[1]],matrix[index16[0]-1][index16[1]]=matrix[index16[0]-1][index16[1]],matrix[index16[0]][index16[1]]
return matrix
solved = [[[2,1,3,4],
[5,6,7,8],
[9,10,11,12],
[13,14,15,16]
]]
not_solved = [[0,"up"],
[0,"left"]
]
while not_solved:
solved.append(main(solved[not_solved[0][0]],not_solved[0][1]))
break
当我执行程序时,我可以看到"已解决"阵列。然而,初始矩阵保持与开始时相同。
[[[2, 1, 3, 4], [5, 6, 7, 8], [9, 10, 11, 16], [13, 14, 15, 12]],
[[2, 1, 3, 4], [5, 6, 7, 8], [9, 10, 11, 16], [13, 14, 15, 12]]]
我该如何修理?
抱歉我的英文。我还在学习。
答案 0 :(得分:1)
您需要在main
内复制矩阵,以便原始矩阵不会改变
import copy
def main(matrix,direction):
matrixcopy = copy.deepcopy(matrix)
index16 = indexOf(16,matrixcopy)
matrixcopy[index16[0]][index16[1]],matrixcopy[index16[0]-1][index16[1]]=matrixcopy[index16[0]-1][index16[1]],matrixcopy[index16[0]][index16[1]]
return matrixcopy
返回:
[[[2, 1, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]],
[[2, 1, 3, 4], [5, 6, 7, 8], [9, 10, 11, 16], [13, 14, 15, 12]]]
答案 1 :(得分:0)
问题是你的主要功能
def main(matrix,direction):
index16 = indexOf(16,matrix)
matrix[index16[0]][index16[1]],matrix[index16[0]-1][index16[1]]=matrix[index16[0]-1][index16[1]],matrix[index16[0]][index16[1]]
return matrix
在此功能中,您需要返回矩阵,但您还要更改矩阵,这是您原始的矩阵。
考虑这个简单的例子:
>>> a=[1,2,3]
>>> def test(b):
b[1]=4
return b
>>> c = test(a)
>>> c
[1, 4, 3]
>>> a
[1, 4, 3]
可能的解决方案是使用复制模块
>>> import copy
>>> a=[1,2,3]
>>> def test(b):
c=copy.deepcopy(b)
c[1]=4
return c
>>> c = test(a)
>>> c
[1, 4, 3]
>>> a
[1, 2, 3]