Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 21, 2022 09:08:13

artemu88
Зарегистрирован: 2021-07-12
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

разное поведение у генератора списка и обычного списка при создании матрицы

Всем привет!
Код ниже создает матрицы для вершин, указанных в списке при помощи обычного списка (matrix):

 def create_matrix(V, a):
    matrix = [[0, 0, 0, 0, 0],
              [0, 0, 0, 0, 0],
              [0, 0, 0, 0, 0],
              [0, 0, 0, 0, 0],
              [0, 0, 0, 0, 0]]
    i = 0
    j = 1
    while j < V:
        matrix[i][j] = matrix[j][i]  = 1
        j += 1
        i += 1
    for i in matrix:
        print(i)
Этот код выдает нужный результат:
 [0, 1, 0, 0, 0]
[1, 0, 1, 0, 0]
[0, 1, 0, 1, 0]
[0, 0, 1, 0, 1]
[0, 0, 0, 1, 0]

Но почему-то код, создающий список matrix, использующий генератор списка:
 def create_matrix_using_generator(V, a):
    matrix = [[0] * V] * V
    i = 0
    j = 1
    while j < V:
        matrix[i][j] = matrix[j][i]  = 1
        j += 1
        i += 1
    for i in matrix:
        print(i)
выдает некорректный результат:
 [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]

Прошу вас подсказать, с чем это связано. Всем большое спасибо!

Отредактировано artemu88 (Дек. 21, 2022 09:08:30)

Офлайн

#2 Дек. 21, 2022 12:51:46

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9874
Репутация: +  854  -
Профиль   Отправить e-mail  

разное поведение у генератора списка и обычного списка при создании матрицы

artemu88
Прошу вас подсказать, с чем это связано.
Копируется одна и та же ссылка на список
  
>>> lst = [[1]] * 3
>>> lst
[[1], [1], [1]]
>>> lst[0][0] = 2
>>> lst
[[2], [2], [2]]
>>>

Так можно делать
  
>>> lst = [[1] for _ in range(3)]
>>> lst
[[1], [1], [1]]
>>> lst[0][0] = 2
>>> lst
[[2], [1], [1]]
>>>



Офлайн

#3 Дек. 21, 2022 14:04:53

artemu88
Зарегистрирован: 2021-07-12
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

разное поведение у генератора списка и обычного списка при создании матрицы

Понял. Спасибо Вам большое!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version