Страницы

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

пятница, 14 февраля 2020 г.

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

#python #python_3x


Есть работающий код задания двумерного массива:

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, но результата нет 
    


Ответы

Ответ 1



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

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

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