我注意到probability_matrix
尽管从未分配,但似乎变成了adapted_given_board
。
def build_probability_matrix(self):
r = 0
p = -1
adapted_given_board = self.probability_matrix
print(self.game.board.given_board)
for i in range(len(self.game.board.given_board)-1):
p += 1
if self.game.board.given_board[i] == '\n':
r += 1
p = -1
else:
adapted_given_board[r][p] = self.game.board.given_board[i]
print(adapted_given_board)
答案 0 :(得分:0)
此作业:
adapted_given_board = self.probability_matrix
是参考,不是副本。也就是说,您正在为self.probability_matrix
创建一个新名称,而不是一个包含内容副本的新列表。
因此,当您这样做时:
adapted_given_board[r][p] = self.game.board.given_board[i]
与您完成的操作完全相同:
self.probability_matrix[r][p] = self.game.board.given_board[i]
由于要使用二维列表,因此请谨慎使用copy
来解决此问题。您可能最终只是将问题向下推了一层。 deepcopy
这样的东西,但这是一个极小的修正的想法,该修正只在分配新条目之前在矩阵中分配它们:
def build_probability_matrix(self):
r = 0
p = -1
adapted_given_board = [[]] # start with one row that has zero cells
print(self.game.board.given_board)
for i in range(len(self.game.board.given_board)-1):
p += 1
adapted_given_board[r].append(None) # add a cell
if self.game.board.given_board[i] == '\n':
r += 1
adapted_given_board.append([]) # add a row
p = -1
else:
adapted_given_board[r][p] = self.game.board.given_board[i]
print(adapted_given_board)
或者您可以简单地添加新元素,而不是通过索引分配它们...
def build_probability_matrix(self):
adapted_given_board = [[]]
print(self.game.board.given_board)
for element in self.game.board.given_board:
if element == '\n':
adapted_given_board.append([])
else:
adapted_given_board[-1].append(element)
print(adapted_given_board)