繁体   English   中英

在列表中更改列表中的元素会更改整个列 - python

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM