2013-12-21 2 views
0

Итак, я пытаюсь работать с многомерными списками, чтобы создать карту для игры ASCII. У меня есть код, чтобы инициализировать список,Назначение списка Python вне диапазона после инициализации многомерного списка

mapData = [[[0 for m in range(3)] for x in range(32)] for y in range(32)] 

тогда я пытаюсь получить доступ и изменить значение в переменной, используя этот код,

mapData[0][5][5] = 1 

и получить это сообщение об ошибке,

IndexError: list assignment index out of range 

Я пробовал много вещей, но ничего не могу понять.

ответ

2

В вашем самом внутреннем списке есть только три ячейки, поэтому попытка доступа к [5] на нем не будет работать.

Показатели идут от внешнего (с 32 входами) до самого внутреннего (с 3 входами). Если вы ожидали, что ваш самый внутренний список будет иметь 6 или более ячеек, вам необходимо настроить петлю for m in range(3).

Если вы ожидали индексировать первую ячейку внутреннего списка, возможно, вам необходимо поменять местами индексы:

mapData[5][5][0] = 1 

заклинание это еще немного:

  • mapData[0] возвращает первый элемент самого внешнего списка, сгенерированного циклом for y in range(32) во вложенных списках.
  • [5] в mapData[0][5] затем получает доступ к 6-му элементу предыдущего результата, списку из цикла for x in range(32).
  • [5] в mapData[0][5][5] пытается индексировать самый внутренний список, один из объектов списка, генерируемых [0 for m in range(3)]. Поскольку эти списки содержат только 3 0 значений, возникает исключение IndexError.
+0

Так оно идет в обратном порядке? Это имеет смысл, спасибо! – Aearnus

Смежные вопросы