【问题标题】:editing a list of lists python3编辑列表python3的列表
【发布时间】:2011-08-07 02:35:41
【问题描述】:

我有以下代码

class Board:
    def __init__(self, size=7):
        self._size = size
        self._list, self._llist =[],[]
        for i in range (self._size):
            self._list.append('_ ')
        for j in range(self._size):
            self._llist.append(self._list)
    def printboard(self):
        for i in range(self._size):
            for j in range(self._size):
                print(self._llist[i][j], end = ' ')
            print('\n')

    def updateboard(self,x,y,letter):
        self._llist[x][y]=letter
        self.printboard()

board = Board(3)
board.updateboard(0,0,'c')

这会打印出来

c _  _ 

c _  _  

c _  _

而不是

c _  _ 

_ _  _  

_ _  _

我看不出出了什么问题。另外,有没有更简单的方法来动态创建列表列表?

谢谢!

【问题讨论】:

    标签: python python-3.x nested-lists


    【解决方案1】:

    您正在使用相同的list 对象创建llist,重复多次。如果您希望llist 中的每个列表都是一个单独的、独立的对象(这样当您修改内容时只更改一个列表),那么您需要为每个列表附加一个不同的副本。最简单的方法是更改​​:

    self._llist.append(self._list)
    

    self._llist.append(list(self._list))
    

    更简单的代码是:

    self._list = ['_ '] * self._size
    self._llist = [list(self._list) for i in range(self._size)]
    

    【讨论】:

    • 感谢工作。但是我不明白为什么当我只更改 llsit 中的一个字段时列表会发生变化?
    • 你所做的是让三个标签都指向同一个列表。我所做的是制作三个不同的列表。阅读该页面几次,希望你能明白这一点。注意 - 在那个页面上,他们执行 self._list[:] 这是我对 list(self._list) 所做的另一种方式。另外,停止调用变量“列表”,因为它令人困惑! :o)
    猜你喜欢
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    • 2019-04-17
    • 2017-06-24
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多