Найти - Пользователи
Полная версия: разное поведение у генератора списка и обычного списка при создании матрицы
Начало » Python для новичков » разное поведение у генератора списка и обычного списка при создании матрицы
1
artemu88
Всем привет!
Код ниже создает матрицы для вершин, указанных в списке при помощи обычного списка (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]

Прошу вас подсказать, с чем это связано. Всем большое спасибо!
py.user.next
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]]
>>>
artemu88
Понял. Спасибо Вам большое!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB