2011-08-07 2 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

동일한 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)] 
+0

덕분에이 작업을 수행하는 가장 쉬운 방법은 변경하는 것입니다. 하지만 llsit에서 한 필드 만 변경하면 목록이 변경되는 이유를 이해할 수 없습니까? – pogo

+0

여기에 설명이 있습니다. http://henry.precheur.org/python/copy_list –

+0

당신이하고 있던 일은 모두 같은 목록을 가리키는 세 개의 레이블을 만드는 것입니다. 내가 한 일은 세 가지리스트를 만드는거야. 몇 번이나 그 페이지를 읽고 잘하면 당신은 아이디어를 얻을 것이다. note - 그 페이지에서 그들은 self._list [:]를 수행합니다. 이것은 list (self._list)로 한 일을하는 또 다른 방법입니다. 또한 변수 "list"를 호출하는 것이 혼란 스럽기 때문에 중지하십시오! :영형) –