Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 4, 2018 10:38:42

Hait
Зарегистрирован: 2018-01-04
Сообщения: 2
Репутация: +  0  -
Профиль  

Проход вложенных списков циклами

Добрый день. Пытаюсь обойти матрицу при помощи циклов. Но получается какая-то белиберда. На каждой итерации изменяется элемент не только 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])]

Офлайн

#2 Янв. 4, 2018 10:41:52

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Проход вложенных списков циклами

Hait
Список - ссылочный тип, размножая список в первой строке вы просто копируете ссылку - получаете N переменных ссылающихся на один и тот же экземпляр списка.



Офлайн

#3 Янв. 4, 2018 10:51:16

Hait
Зарегистрирован: 2018-01-04
Сообщения: 2
Репутация: +  0  -
Профиль  

Проход вложенных списков циклами

FishHook
HaitСписок - ссылочный тип, размножая список в первой строке вы просто копируете ссылку - получаете N переменных ссылающихся на один и тот же экземпляр списка.
А есть тогда красивый способ создать списки определенных размеров?

Офлайн

#4 Янв. 4, 2018 11:49:47

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Проход вложенных списков циклами

Hait
Красиво и явно одновременно сделать что-то сложное довольно трудно. Здесь соперничают разные концепции дзена

Красивое лучше, чем уродливое.
Явное лучше, чем неявное.
Простое лучше, чем сложное.
Сложное лучше, чем запутанное.
Плоское лучше, чем вложенное.
Разреженное лучше, чем плотное.
……..
пишите цикл и не парьтесь



Офлайн

#5 Янв. 4, 2018 11:52:30

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Проход вложенных списков циклами

Ну или списковое выражение

 out = [[0] * len(arr[0]) for _ in arr]



Офлайн

#6 Янв. 4, 2018 11:55:15

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Проход вложенных списков циклами

Hait
А есть тогда красивый способ создать списки определенных размеров?
 >>> [[0 for j in range(3)] for i in range(4)]
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
вобщем гугли генераторы списков/словарей в пайтоне http://pythonicway.com/education/basics/16-python-lists-intermediate



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Янв. 4, 2018 12:08:06)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version