如何制作每个单元格只有一个指针的列表? (我认为这是问题)
由于 ps如果你感觉很好,我如何从打印功能中取出空间?
class Board(object):
"""board of pieces"""
def __init__(self):
self.board = [['0']*7]*6 #6x7 grid
self.board[3][6] = 8
def printBoard(self):
"""Display the board array"""
print self.board
for i in range(6):
for j in range(7):
print self.board[i][j],
print "\n",
0 0 0 0 0 0 8
0 0 0 0 0 0 8
0 0 0 0 0 0 8
0 0 0 0 0 0 8
0 0 0 0 0 0 8
0 0 0 0 0 0 8
答案 0 :(得分:3)
您需要重写self.board
,如下所示
self.board = [['0']*7 for i in range(6)]
阅读Python FAQ中的creating multidimentional列表。
以下是常见问题解答中的答案摘录。
原因是用*复制列表不会创建副本 仅创建对现有对象的引用。 * 3创建一个列表 包含对长度为2的相同列表的3个引用。改为一个 行将显示在所有行中,这几乎肯定不是你的 想。
答案 1 :(得分:1)
class Board(object):
"""board of pieces"""
def __init__(self):
self.board = [['0']*7 for i in range(6)] #6x7 grid
self.board[3][6] = '8'
def printBoard(self):
"""Display the board array"""
print self.board
for i in range(6):
print ''.join(self.board[i])
答案 2 :(得分:1)
也许这是一个重复的question,这是我在那里找到的最佳答案:(我改编了这个例子)
您可以使用列表推导
[x[:] for x in [['0']*7]*6]
[['0'] * 7] * 6创建重复6次的同一对象的列表。您 不能只使用它,因为修改一个元素将修改它 每行中相同的元素!
x [:]相当于list(X),但是因为它有点效率 避免名称查找。无论哪种方式,它都会创建每个的浅层副本 行,所以现在所有元素都是独立的。
答案 3 :(得分:0)
我更喜欢使用由元组索引的字典用于多维数组:
class Board(object):
"""board of pieces"""
WIDTH = 7
HEIGHT = 6
def __init__(self):
self.board = {}
for i in range(self.HEIGHT):
for j in range(self.WIDTH):
self.board[i,j] = 0
self.board[3,6] = 8
def printBoard(self):
"""Display the board array"""
print self.board
for i in range(6):
for j in range(7):
print self.board[i,j],
print "\n",