簡體   English   中英

Python 中列表的奇怪行為

[英]Strange behavior with lists in Python

我注意到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)

本次作業:

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)

或者您可以簡單地 append 您的新元素,而不是按索引分配它們......

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM