Мутирование двумерного списка - PullRequest
1 голос
/ 11 апреля 2020

Я пытаюсь сделать более продвинутую программу Ti c Ta c Toe с «бесконечным» количеством строк / строк. Но когда я пытаюсь изменить список, он меняет весь столбец, а не одну точку.

size = 4
board = size * [size*[' ']]
board[0][1] = 'x'
#output:
#[[' ', 'x', ' ', ' '],
# [' ', 'x', ' ', ' '],
# [' ', 'x', ' ', ' '],
# [' ', 'x', ' ', ' ']]

Как это исправить?

Ответы [ 2 ]

1 голос
/ 11 апреля 2020

Слава @Pynchia за избиение меня в ответ. Вот моя версия кода. Я думаю, что проблема у вас была в результате вашего метода создания списка списков.

size = 4

# simple way to create a list of lists
board = [size * [' '] for i in range(4)]

board[0][1] = 'x'
print(board)

Вывод будет таким, как ожидалось.

1 голос
/ 11 апреля 2020

Это происходит потому, что внутренний список, из которого состоит каждая строка, является тем же объектом, который повторяется.

Вы можете изменить его на

board = [
    [' ']*size
    for _ in range(size)
]

или использовать понимание двойного списка

size = 4
board = [
    [' ' for _ in range(size)]
    for _ in range(size)
]
board[0][1] = 'x'
print(board)

, которые оба производят

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