gpt4 book ai didi

python - 如何复制变量的内容?

转载 作者:行者123 更新时间:2023-12-01 03:59:14 25 4
gpt4 key购买 nike

我编写了一个数独解算器,并在适当的数独板中转换字符串时遇到了问题。

示例输入为“2.3.8....8..7....1...6.5.7...4......3..” ..1......82.5..6...1.......”它告诉用户应该将哪些数字放入数独板上的方格中。这 '。'或“0”代表空白,我用列表 [1,2,...,8,9] 填充列表中的位置。这是通过transform函数完成的。第一次调用该函数时,它完成正确,但第二次和第三次,它完成不正确(似乎新板存储了前一个板的一些信息)。

在此编码示例中,第二个打印函数打印不正确,在前两个 8 之间,我打印的列表中有一个不应该出现的 6,我相信它来自之前的转换调用“easy_board”。

请看一下。谢谢。

print "Welcome to 9X9 Sudoku in Python"
SIZE = 81
LENGTH = 9

empty_board = [[i for i in xrange(1, LENGTH + 1)] for j in xrange(0, SIZE)]

def transform(input):
if len(input) != SIZE:
print "Input length [%d] is not of the correct size [%d]." % len(input), SIZE
return
board = empty_board
for i in xrange(SIZE):
if input[i] != '0' and input[i] != '.':
board[i] = [int(input[i])]
return board

easy_board = "003020600900305001001806400008102900700000008006708200002609500800203009005010300"
medium_board = "2.3.8....8..7...........1...6.5.7...4......3....1............82.5....6...1......."
hard_board = ".6.5.4.3.1...9...8.........9...5...6.4.6.2.7.7...4...5.........4...8...1.5.2.3.4."

print "\ndoing ez board"
our_board = transform(easy_board)
print our_board

print "\ndoing medium board"
our_board = transform(medium_board)
print our_board

print "\ndoing hard board"
our_board = transform(hard_board)
print our_board

最佳答案

你的直觉很正确!问题就出在这行

board = empty_board

在Python中,大多数事情都是按引用传递的,这意味着这一行只是将变量board声明为指向数组empty_board的指针。当您稍后在 transform 函数中修改 board 时,您实际上是在修改您的 empty_board!

您想要的是将复制 empty_boardboard,您可以通过添加导入副本轻松完成此操作> 到文件顶部,然后:

board = copy.deepcopy(empty_board)

请注意,您必须使用deepcopy而不仅仅是复制,因为empty_board是一个数组数组。如果您只是复制它,您将得到一个包含相同数组的新数组,因此当您修改新数组的内容时,您也会修改empty_board<的内容.

关于python - 如何复制变量的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36902829/

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