@KrisTeylor

Не могу разобраться с присваиванием значения вложенного списка?

Есть список из списков в виде квадратной матрицы a. Нулевому элементу нулевого списка пытаюсь присвоить значение через a[0][0] = 1. Но вместо этого значение присваивается каждому нулевому элементу каждого списка. Что я делаю не так?
n = int(input())
a = [[0] * n] * n
for k in a:
    print(k)
a[0][0] = 1
for k in a:
    print(k)

6003f782eeafa686100444.jpeg
  • Вопрос задан
  • 105 просмотров
Пригласить эксперта
Ответы на вопрос 2
MinTnt
@MinTnt
Всё так происходит из-за способа задания таблицы:
a = [[0] * n] * n

Каждый раз при a[0][0] = 1, оно как бы сначала обращается к a[0] = [[0] * n] а потом уже этом массиве, изменяет первый элемент в последовательности, и далее хоть и кажется, что получается тот массив, который мы хотим, но по итогу выходит что-то вроде... [[1, 0, 0...]] * n , и в конечном итоге, после такой отрисовки устанавливается, что каждый сделующий добавленный элемент, копирует значение первого.

Ps. Для пробы, немного изменил способ создание массива, и всё сработало хорошо
a = []
for i in range(n):
	a.append([0] * n)
Ответ написан
@mkone112
Начинающий питонист.
Потому что это один список. Походу ты совершенно не знаком с Python.
Попробуй что-то вроде
a = [[0] * n for _ in range(n)]
Я посмотрел на твои вопросы, и рекомендую их пока больше не задавать. Открой учебник по питону, прочитай от корки до корки - это избавит тебя от большинства недопониманий.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы