[英]changing element in list within a list changes whole column - python
所以我试图得到一个像宽度为 10 和高度为 5 的坐标系的画板,所以它看起来像这样由列表中的列表表示,例如 [['x','x','x','x',' x','x','x','x','x','x'],['x','x','x','x','x','x',' x','x','x','x'],['x','x','x','x','x','x','x','x',' x','x'],['x','x','x','x','x','x','x','x','x','x'], ['x','x','x','x','x','x','x','x','x','x']]
打印出来看起来像这样
xxxxxxxxxx
xxxxxxxxxx
xxxxxxxxxx
xxxxxxxxxx
xxxxxxxxxx
现在我想改变其中的一个元素,所以它看起来像这样
xxcxxxxxxx
xxxxxxxxxx
xxxxxxxxxx
xxxxxxxxxx
xxxxxxxxxx
我的代码:
class Paintboard():
def __init__(self, width, height):
self.width = width
self.height = height
extra = []
self.board = []
for x in range(0, self.width):
extra.append('x')
for y in range(0, self.height):
self.board.append(extra)
def str(self):
for x in self.board:
print(" ".join(x))
return ""
def paint(self):
self.board[0][3] = "c" # here btw x and y are switched cuz of element arrangement in self.board
test = Paintboard(10, 5)
test.paint()
test.str()
由于某种原因output实际上替换了列中的每个元素,而不是仅仅替换[3,0]上的元素:
xxxcxxxxxx
xxxcxxxxxx
xxxcxxxxxx
xxxcxxxxxx
xxxcxxxxxx
我一直试图在我的代码中找到错误很长时间,请帮助我
self.board.append(extra)
此行将与行相同的 object 附加到每一列。 因此,如果您通过一行更改 object,所有其他行也会看到效果。
您可以将该行复制到 append 代替。
self.board.append(extra.copy())
你的代码应该可以工作
其他方式:您需要更改 for 循环,
class Paintboard():
def __init__(self, width, height):
self.width = width
self.height = height
self.board = []
for y in range(0, self.height):
extra = []
for x in range(0, self.width):
extra.append('x')
self.board.append(extra)
def str(self):
for x in self.board:
print(" ".join(x))
return ""
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.