Страницы

Поиск по вопросам

среда, 24 апреля 2019 г.

Задание валидного двумерного массива

Есть работающий код задания двумерного массива:
field=[] for i in range(8): block = [] for j in range(8): block.append('X') field.append(block)
Выгялдит не очень, но он работает! Суть проблемы в том что при "не красивой" инициализации все списки отдельные объекты и когда мы делаем изменение в ячейке меняется только она. Как сократить, чтобы код был более "питонистичным", но и сохранить правильную изменяемость ячеек (функциональность)?
Что-то вроде
field = [['X']*8]*8
Но так при изменении поля, меняются все поля по координате из-за того что все ссылаеться на один список. Хочу чтобы при field[2][2] = 'O' изменялась только ячейка [2][2], а не весь столбец
field[2][2] = 'O'
['X', 'X', 'O', 'X', 'X', 'X', 'X', 'X'] ['X', 'X', 'O', 'X', 'X', 'X', 'X', 'X'] ['X', 'X', 'O', 'X', 'X', 'X', 'X', 'X'] ['X', 'X', 'O', 'X', 'X', 'X', 'X', 'X'] ['X', 'X', 'O', 'X', 'X', 'X', 'X', 'X'] ['X', 'X', 'O', 'X', 'X', 'X', 'X', 'X'] ['X', 'X', 'O', 'X', 'X', 'X', 'X', 'X'] ['X', 'X', 'O', 'X', 'X', 'X', 'X', 'X']
Пытался использовать [:], list, но результата нет


Ответ

L = [['X' for n in range(8)] for n in range(8)]

Комментариев нет:

Отправить комментарий