2011-08-07 64 views
0

我有以下代码编辑列表的列表python3

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 _ _ 

_ _ _ 

_ _ _ 

我看不出什么错误。另外,是否有一种更简单的方式来动态创建列表清单?

谢谢!

回答

1

您正在创建llist具有相同的list对象,重复多次。如果你想让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)] 
+0

感谢那些工作。但我不明白为什么当我更改llsit中的一个字段时列表正在改变? – pogo

+0

这里有一个解释 - http://henry.precheur.org/python/copy_list –

+0

你正在做的是制作三个标签都指向相同的列表。我做了三个不同的列表。阅读该页面几次,希望你会明白。注意 - 在该页面上他们做self._list [:]这是做我做的事情的另一种方式(list.self)。此外,停止调用变量“列表”,因为它是混乱! :O) –