2017-09-10 16 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。谢谢。我感谢您的帮助。 –