Форум сайта python.su
Добрый день. Пытаюсь обойти матрицу при помощи циклов. Но получается какая-то белиберда. На каждой итерации изменяется элемент не только i-ой строки по номеру j, но и j-е элементы других строк.
Прикладываю циклы и код генерации (знаком только с с/с++, т.ч. возможно что-то не понимаю в синтаксисе)
out = [[0] * len(arr[0])] * len(arr) for i in range(len(arr)): for j in range(len(arr[0])): out[i][j] += arr[i - 1][j] out[i][j] += arr[(i + 1) % len(arr)][j] out[i][j] += arr[i][j - 1] out[i][j] += arr[i][(j + 1) % len(arr[0])]
Офлайн
Hait
Список - ссылочный тип, размножая список в первой строке вы просто копируете ссылку - получаете N переменных ссылающихся на один и тот же экземпляр списка.
Офлайн
FishHookА есть тогда красивый способ создать списки определенных размеров?
HaitСписок - ссылочный тип, размножая список в первой строке вы просто копируете ссылку - получаете N переменных ссылающихся на один и тот же экземпляр списка.
Офлайн
Hait
Красиво и явно одновременно сделать что-то сложное довольно трудно. Здесь соперничают разные концепции дзена
Красивое лучше, чем уродливое.пишите цикл и не парьтесь
Явное лучше, чем неявное.
Простое лучше, чем сложное.
Сложное лучше, чем запутанное.
Плоское лучше, чем вложенное.
Разреженное лучше, чем плотное.
……..
Офлайн
Ну или списковое выражение
out = [[0] * len(arr[0]) for _ in arr]
Офлайн
Hait
А есть тогда красивый способ создать списки определенных размеров?
>>> [[0 for j in range(3)] for i in range(4)] [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
[code python][/code]
Отредактировано PEHDOM (Янв. 4, 2018 12:08:06)
Офлайн