Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:参数中包含矩阵的函数_Python_Python 3.x_Matrix - Fatal编程技术网

Python:参数中包含矩阵的函数

Python:参数中包含矩阵的函数,python,python-3.x,matrix,Python,Python 3.x,Matrix,所以,在我的程序中,我有一个“main”函数,它改变给定矩阵的两个元素。矩阵是列表的一个元素(在本例中,列表是变量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[inde

所以,在我的程序中,我有一个“main”函数,它改变给定矩阵的两个元素。矩阵是列表的一个元素(在本例中,列表是变量
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]]]
我怎样才能修理它


对不起我的英语。我还在学习。

问题是你的主要功能

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]

您需要在
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]]]

你能添加预期的输出吗?你也在某处定义了
indexOf
吗?啊,汤姆,是这样的,我在那里添加了函数,所以解出的是一个矩阵列表。列表中的第一个矩阵应该保持原样,并附加一个新的解决方案。但第一个矩阵被更改为与第二个矩阵相同。这大概是一个指针与复制的问题。非常感谢。