редактирование списка списков python3 - PullRequest
0 голосов
/ 07 августа 2011

У меня есть следующий код

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 Ответ

1 голос
/ 07 августа 2011

Вы создаете 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)]
...