mar*_*st2 4 python list append python-2.x python-2.7
我试图在python 2.7中构建一个5x5网格的游戏板,表示为2维列表.我尝试将其编写为board = [["O"]*cols]*rows
(cols和rows已经声明为5)但是当我尝试编辑索引处的值时,它会更改整行.例如
cols = 5
rows = 5
board = [["O"]*cols]*rows
Run Code Online (Sandbox Code Playgroud)
这打印:
[['O', 'O', 'O', 'O', 'O'], ['O', 'O', 'O', 'O', 'O'], ['O', 'O', 'O', 'O', 'O'], ['O', 'O', 'O', 'O', 'O'], ['O', 'O', 'O', 'O', 'O']]
Run Code Online (Sandbox Code Playgroud)
现在当我尝试更改索引的值时:
board[1][1] = "X"
Run Code Online (Sandbox Code Playgroud)
它打印:
[['O', 'X', 'O', 'O', 'O'], ['O', 'X', 'O', 'O', 'O'], ['O', 'X', 'O', 'O', 'O'], ['O', 'X', 'O', 'O', 'O'], ['O', 'X', 'O', 'O', 'O']]
Run Code Online (Sandbox Code Playgroud)
我只想改变第1行第1行的值.
我也尝试过以下方法:
board = []
for i in xrange(5):
board.append(["O"]*cols)
Run Code Online (Sandbox Code Playgroud)
这个就像我想要的那样.我想了解的是有什么区别?
如果你评估下面的表达式,你将看到它将为你的第一个例子返回True,但对另一个例子则返回False.两个列表实际上都指向内存中的相同单个列表.
board[0] is board[1]
如果你想要一个制作不同新列表的简短版本,那么这个版本也可以正常工作.
board = [["O"]*cols for y in range(rows)]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1143 次 |
最近记录: |