2017-09-10 17 views
-2

我正在嘗試更改位置(row, col)中的元素board,它是一個列表的列表。教授給我們的最新版本創建了一個副本並將其返回。因此,我認爲這是耗時:如何修改列表中的元素值?

# Add a piece to the board at the given position, and return a new board (doesn't change original) 
def add_piece(board, row, col): 
    return board[0:row] + [board[row][0:col] + [1,] + board[row][col+1:]] + board[row+1:] 

要就地改變它,我試圖做的(像C++的方式):

def add_piece(board, row, col): 
    board[row][col]=1 
    return board 

但這並不改變board,我相信,因爲我得到不正確的輸出。有人可以告訴我如何在原地更改它,以確保每次原始board本身被修改?謝謝!

編輯:顯然,這不是MVC - 有人請指出需要添加什麼嗎?我得到什麼輸出是沒有必要的因爲我只想要一個元素在board[row][col]進行更改,但這並沒有發生!

+4

提供一個[MCVE];輸入,輸出和所需的輸出。 「我得到一個不正確的輸出」並不是很豐富,目前你的代碼看起來是正確的,所以別的是錯的;我們沒有足夠的診斷問題。 – ShadowRanger

+0

@ShadowRanger,我很抱歉,先生,但我認爲我得到的輸出是無關緊要的。我想要的是隻有位置板[row] [col]上的元素被改變。這個,我認爲是最小的,完整的和可驗證的。謝謝。 –

+0

@ whackamadoodle3000,正確。我希望第二個修改董事會。如果你能指出我能做到這一點(無需返回一個新的「board」進行修改),那將會非常有幫助。 –

回答

1

您的代碼在正確的上下文中起作用。這就是爲什麼人們要求一個MCVE。

from pprint import pprint 

board = [[1,2,3], 
     [4,5,6], 
     [7,8,9]] 

def add_piece(board, row, col): 
    board[row][col]=1 

add_piece(board,1,1) 

pprint(board,width=20) 

輸出:

[[1, 2, 3], 
[4, 1, 6], 
[7, 8, 9]] 
+0

哦,哈哈哈,好吧,我明白你的觀點。我很困惑爲什麼每個人都在問MCVE。謝謝。我感謝您的幫助。 –