Матричный код не работает, даже похож на другой - PullRequest
0 голосов
/ 03 ноября 2019

Я пытался создать код для идентификационной матрицы и вышел с этим кодом:

def identidade(n):
i =0
l = [0] * n
l1 = [l.copy()] *n
for i in range (n):
    l1[i][i] = 1
    print(l1)
return l1

вывод:

 [[1, 1, 1, 1, 1],
 [1, 1, 1, 1, 1],
 [1, 1, 1, 1, 1],
 [1, 1, 1, 1, 1],
 [1, 1, 1, 1, 1]]

Но я пришел с оченьаналогичный код в интернете:

def identity(n):
m=[[0 for x in range(n)] for y in range(n)]
for i in range(0,n):
    m[i][i] = 1
return m

, который возвращает:

 [[1, 0, 0, 0, 0],
 [0, 1, 0, 0, 0],
 [0, 0, 1, 0, 0],
 [0, 0, 0, 1, 0],
 [0, 0, 0, 0, 1]]

Итак, мой вопрос заключается в том, почему мой код не возвращает правильный вывод при выборе элемента в спискесписки (l1 [i] [i] = 1)? ТКС заранее

1 Ответ

1 голос
/ 03 ноября 2019

Фактическая проблема здесь в том, что вы используете оператор * для создания (как вы надеетесь) копий списка '[l.copy ()]', но он фактически создает ссылки. Использование функции copy () внутри квадратных скобок просто разрывает соединение с исходным списком 'l', но не решает проблему с созданием ссылок на вновь созданную копию.

Просто попробуйте заменить *Оператор с циклом for - это решит вашу проблему.

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