Python: итерация по подспискам

У меня есть проект, в котором я пытаюсь редактировать части вложенных списков. Скажем, я начал с этого списка:

[[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]]

Я хочу перебрать часть этого списка, чтобы получить результат, который представляет собой квадрат единиц в центре, вот так.

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

Я пробовал использовать цикл for для перебора списка и вложенный цикл for для перебора подсписок. Однако это не сработало. Вместо этого я получил следующий список:

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

Вот мой код:

list = [[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]]

for i in range(1,4):
    for j in range(1,4):
        list[i][j] = 1

Почему этот код не работает? Я искал день или два и не нашел ответа. Заранее благодарим всех, кто нашел время, чтобы ответить или прокомментировать.


person hmmm    schedule 15.05.2015    source источник
comment
Я настоятельно рекомендую numpy.   -  person Shashank    schedule 15.05.2015


Ответы (1)


Опубликованный вами код работает нормально:

>>> list = [[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]]
>>> 
>>> for i in range(1,4):
...     for j in range(1,4):
...         list[i][j] = 1
... 
>>> pprint(list)
[[0, 0, 0, 0, 0],
 [0, 1, 1, 1, 0],
 [0, 1, 1, 1, 0],
 [0, 1, 1, 1, 0],
 [0, 0, 0, 0, 0]]

Убедитесь, что ваш код действительно выглядит так, как вы разместили здесь.

person Raniz    schedule 15.05.2015
comment
Спасибо. Я, должно быть, напечатал что-то не так. Удивительно, что это так много раз проскальзывало. Я до сих пор не знаю, с какой частью кода я ошибся. - person hmmm; 15.05.2015