Почему квадратная матрица меняется, когда я пересекаю ее? - PullRequest
0 голосов
/ 04 июня 2018

Когда я зацикливаюсь на матрице, чтобы получить диагонали:

a = [[11, 2, 4],
     [4, 5, 6],
     [10, 8, -12]]

i = 0
o = 0
for a[i] in a:
    d1 = a[i][o]
    o += 1
    print(d1)

выходной сигнал соответствует ожидаемому 11, 5, -12,но когда я снова распечатываю матрицу:

print(a)

матрица изменилась

[[10, 8, -12], [4, 5, 6], [10, 8, -12]]

первая строка больше не похожа на [11, 2, 4].

Iне могу понять, почему это происходит.

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Вы присваиваете каждый элемент a первому элементу a.См. Следующий код.

for a[0] in a:
    print(a)

Это дает:

[[11, 2, 4], [4, 5, 6], [10, 8, -12]]
[[4, 5, 6], [4, 5, 6], [10, 8, -12]]
[[10, 8, -12], [4, 5, 6], [10, 8, -12]]

a [0] сначала переназначается на [11,2,4], затем на [4,5,6], а затем, наконец, [10,8, -12].a [1] и a [2] не изменены.

0 голосов
/ 04 июня 2018

Предполагая, что ваш список списков представляет собой квадратную матрицу, используйте одну петлю внутри понимания списка, чтобы извлечь диагонали:

>>> [a[i][i] for i in range(len(a))]
[11, 5, -12]

Я не уверен, где вы натолкнулись на это for a[i] in aсинтаксис, но это не делает то, что вы думаете, что делает.В конце концов он переназначает 0-й элемент тому, что цикл for повторяет как побочный эффект, поэтому не делайте этого.

Кстати, исправляя ваш код, это будет:

d = []
for i in range(len(a)):
    d.append(a[i][i])

Это просто явное переписывание понимания списка выше.

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