2011-08-07 79 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) –