Как я могу остановить мою функцию от ввода значения в каждый список? - PullRequest
0 голосов
/ 03 ноября 2019

Для моего назначения мне нужно вставить значение в определенный индекс в подсписке списка, который содержит 3 списка. Вместо того, чтобы изменять значение только в 1 подсписке, оно меняет его в каждом подсписке.

Я попытался повторно ввести значения, которые используются для определения индексов.

def make_move(cur, move, player):
  m0 = move[0]
  m1 = move[1]
  cur[m0][m1] = player
make_move(world, (1,0), 'X')
print(world)

Я ожидаю выводабыть:

[['', '', ''], ['X', '', ''], ['', '', '']]

Что я получаю:

[['X', '', ''], ['X', '', ''], ['X', '', '']]

Я сделал функцию мира следующим образом:

def set_up_game(size):
  n = 0
  num = 0
  s = int(get_game_size(size))
  game = []
  rows = []
  columns = ''
  while n < s:
    rows.append(columns)
    n += 1
  while num < s:
    game.append(rows)
    num += 1

  return game

1 Ответ

0 голосов
/ 03 ноября 2019

Проблема в строке:

game.append(rows)

Измените ее на:

game.append(list(rows))

, которая будет создавать новые списки в списке game.


То, что вы делали изначально (с циклом while), эквивалентно:

game = [row] * num

Вы можете увидеть проблему с этим здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...