【发布时间】:2012-09-24 09:27:24
【问题描述】:
我正在尝试在 python 2.7 中构建一个 5x5 网格的游戏板,表示为二维列表。
我尝试将其写为board = [["O"]*cols]*rows(列和行已被声明为5),但是当我尝试编辑索引处的值时,它会更改整行。例如
cols = 5
rows = 5
board = [["O"]*cols]*rows
打印出来:
[['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']]
现在当我尝试更改索引的值时:
board[1][1] = "X"
打印出来:
[['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']]
我只想更改第 1 行第 1 列的值。
我还尝试了以下操作:
board = []
for i in xrange(5):
board.append(["O"]*cols)
这个工作就像我想要的那样。我想了解的是有什么区别?
【问题讨论】:
-
请注意,列表在 Python 中从 0 开始索引。因此
board[0][0]将返回第 1 行第 1 列。 -
顺便说一句,这不是 2.x 特有的:它一直以这种方式工作,而且几乎肯定会一直以这种方式工作。
标签: python list python-2.7 append python-2.x