Python 当使用递归时,如何将所有输出放在一个列表中?

Python 当使用递归时,如何将所有输出放在一个列表中?,python,recursion,Python,Recursion,我正在用python做八个皇后。我想使用append方法将所有输出放在一个列表中。 然而,很奇怪的是,所有的输出都是一样的。 有人能帮我吗 我正在使用四个皇后测试我的程序: board = [] solution=[] def isConflict(x, y): for (i, j) in board: if x == i: return True if y == j: return True

我正在用python做八个皇后。我想使用append方法将所有输出放在一个列表中。 然而,很奇怪的是,所有的输出都是一样的。 有人能帮我吗

我正在使用四个皇后测试我的程序:

board = []
solution=[]

def isConflict(x, y):
   for (i, j) in board:
        if x == i:
            return True
        if y == j:
            return True
        if abs(x - i) == abs(y - j):
            return True
        else:
            return False


def solve(x,y):
    for y in range(1, 5):
        if isConflict(x, y)==False:
            board.append((x, y))
            solve(x + 1,y)
            board.remove((x,y))
    if x > 4:
        solution.append(board)
        print(solution)

solve(1,1)
输出如下所示:

[[(1, 2), (2, 4), (3, 1), (4, 3)]]
[[(1, 3), (2, 1), (3, 4), (4, 2)], [(1, 3), (2, 1), (3, 4), (4, 2)]]
然而,我想要的是:

[[(1, 2), (2, 4), (3, 1), (4, 3)]]
[[(1, 2), (2, 4), (3, 1), (4, 3)], [(1, 3), (2, 1), (3, 4), (4, 2)]]

我该怎么办?

我不明白你的
solve(x,y)
函数如何使用它的
y
参数。它似乎在第一行覆盖了它。您多次将相同的
板添加到
解决方案中。添加
板时复制
板,或者在将
板添加到
解决方案
后,启动一个新的
,这样您就不会修改已添加的板。这一点也不奇怪:您不复制列表。这意味着每个解决方案都引用相同的列表。如果你
append(board)
,你应该
append(list(board))
。我不知道8皇后的问题是什么,但是有人已经在python中做了这件事,尝试这个链接运行你的代码,看看它对
board
解决方案中的两个条目使用相同的列表,然后使用@WillemVanOnsem的建议,并将其作为答案发布。