gpt4 book ai didi

python - 将全局列表附加到全局列表?

转载 作者:行者123 更新时间:2023-12-01 09:28:54 25 4
gpt4 key购买 nike

我编写了以下代码来解决 n-Queens problem我们必须找到 n 的所有可能的合法(非攻击性)放置位置皇后n*n棋盘。该代码使用标准回溯解决方案。

这里是方法n_queens使用辅助方法 solve_n_queens它使用递归。外部方法只是初始化全局列表 result & col_placement并调用辅助方法。

def n_queens(n):
def solve_n_queens(row):
if row == n: # all queens are legally placed
result.append(list(col_placement))
return
for col in range(n):
# check if new queen is either 1) in same column or 2) same diagonal with any previously placed queen
if all(abs(col-c) not in (0, row-r)
for r, c in enumerate(col_placement[:row])):
col_placement[row] = col
solve_n_queens(row+1)
result, col_placement = [], [0] * n # result is empty initially; [0] * n means no queen is placed
solve_n_queens(0)
return result

这会给出 n_queens(4) 的错误输出

[[3, 1, 2, 1], [3, 1, 2, 1]]

但这不是算法错误,因为只是更改了第四行 result.append(col_placement) result.append(list(col_placement)) 神秘地给出了正确的输出

[[1, 3, 0, 2], [2, 0, 3, 1]]

我不理解的是 col_placement已经是 list ,为什么我们需要调用list方法?

最佳答案

问题是,如果不使用 list,您将附加对您正在使用的相同且唯一的列表 col_placement 的引用(如您所见,结果不仅是错了,但它们也是一样的)。使用 list 创建一个新副本(col_placement 的即时快照),当您继续执行其余部分时,该副本不会在 col_placement 修改时被修改。程序。

所以本质上 list(col_placement)col_placement.copy()col_placement[:] 相同。

关于python - 将全局列表附加到全局列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50126058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com