将列表分配给变量后附加列表会多次输出相同变量的最终版本

问题描述 投票:-2回答:1

对于“皇后问题”(在棋盘上放置8个皇后,这样他们之间就不会互相攻击)我编写了一个程序,以列表形式显示所有可能的解决方案。该列表有8个位置,每个位置代表棋盘的x坐标。该代码工作正常,但最后我想制作另一个列表,其中包含所有列表以及可能的问题解决方案。这里出现问题:解决方案列表仅多次显示最终解决方案。我认为这是因为列表采用了变量(在此为b)并将其追加,然后在我打印时,它仅打印了b的最终解决方案,因为它已更改。我该如何解决?

我添加了显示常规设置的部分代码:b是具有8个元素的列表,代表国际象棋棋盘。sol应该是包含所有可能解决方案的列表

for b[0] in r8:
    for b[1] in r8:
        if check(1) == True and checkdi(1) == True:
            for b[2] in r8:
                if check(2) == True and checkdi(2) == True:
                    for b[3] in r8:
                        if check(3) == True and checkdi(3) == True:
                            for b[4] in r8:
                                if check(4) == True and checkdi(4) == True:
                                    for b[5] in r8:
                                        if check(5) == True and checkdi(5) == True:
                                            for b[6] in r8:
                                                if check(6) == True and checkdi(6) == True:
                                                    for b[7] in r8:
                                                        if check(7) == True and checkdi(7) == True:
                                                            sol.append(b)
                                                            print(sol)
                                                            print(b)

它使用print(b)打印的解决方案都很好,因此代码可以正常工作,我只需要帮助即可创建所有可能解决方案的列表

这是我在这里的第一篇文章,如果有什么我可以做得更好的地方,请也告诉我。

python list variables append
1个回答
0
投票

您可以尝试使用

import copy
sol.append(copy.deepcopy(b))

,也许只是在完成循环的地方打印sol。这里我假设您在循环之前将sol初始化为sol = []

© www.soinside.com 2019 - 2024. All rights reserved.