2013-07-02 3 views
0

Моя программа использует код ниже для вставки объекта с именем Field для многомерного массива, который создается на лету (по крайней мере, я думал, что это будет создан):Python два создание многомерного массива

for x in range(self.width): 
    for y in range(self.height): 
      self.board_fields[x][y] = Field() 

Так board_fields не была создана на лету, и я получил ошибку:

AttributeError: 'Board' object has no attribute 'board_fields'

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

+0

Вы уверены, что приведенный выше код был выполнен? Потому что ошибка заставляет меня чувствовать, что python даже не знает, что такое 'board_fields'. – thefourtheye

ответ

2
self.board_fields = [[Field() for j in range(self.height)] for i in range(self.width)] 
+0

Upvoted :) Есть ли другой способ создания многомерных массивов с помощью только стандартных библиотек python? – thefourtheye

+1

Помимо понятий списка (которые я использовал выше), вы можете использовать вложенные * для * циклов (например, решение @ astex). Для произвольного количества измерений вы можете написать рекурсивную функцию, которая принимает список измерений. – bogatron

1

Это не массивы в классическом смысле, а списки списков. Хотя в некоторых контекстах это семантическая разница, здесь это влияет на то, где можно выполнять назначение списков. Оператор append выделяет дополнительную память в список и присваивает свой аргумент этому новому слоту.

self.board_fields = [] 
for x in range(self.width): 
    board_fields_sub = [] 
    for y in range(self.height): 
     board_fields_sub.append(Field()) 
    self.board_fields.append(board_fields_sub) 
+0

, если вы хотите добавить строку 'self.board_fields = []', тогда я получаю ошибку 'self.board_fields [x] [y] = Field() IndexError: индекс индекса вне диапазона – Tom

+1

@Tom Нет, это недостаточно. В пустом списке все еще нет элементов, поэтому индексирование завершится ошибкой. astex создает пустые списки, а затем добавляет элементы к этому. – poke

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