2014-01-14 3 views
0
class WorldMap (object): 
def __init__ (self, width, height): 
    self.width = width 
    self.height = height 
    world = [] 
    for i in range(self.width): 
     world.append(None) 
     for j in range(self.height): 
           world[i].append(None) 


class WorldMap(object): 
def __init__(self, width, height): 
    self.width = width 
    self.height = height 
    self.map = [[None for x in range(self.width)] for y in range(self.height)] 
  1. Второй успешно создает сетку. Я не понимаю, почему первый код не работает.
  2. Чтобы создать пустую сетку со списками, я попытался использовать None и '' в первом коде, но не работает. Почему же '' и None не используются в первом коде?
+0

'numpy.zeros (ширина * высота) .resape ((ширина, высота))' ваш лучший, самый быстрый и простой способ сделать это ... по крайней мере imho ... плюс знакомство с массивами numpy на ранней стадии вам помогут тонны позже –

ответ

2

В своем первом коде, внешний i цикл:

world = [] 
for i in range(self.width): 
    world.append(None) 

создает список None:

world == [None, None, None, ...] 

поэтому во внутреннем j цикле, когда вы звоните

world[i].append(None) 

вы пытаются найти:

None.append(None) 

и вы не можете добавить None! Внешний контур должен быть:

world.append([]) # an empty list 

Затем внутренний цикл будет корректно работать с любым (None, "" и т.д.) вы хотите поместить в этих списках.

Стоит отметить, что вторая версия намного опережающая, чем первая, с (очевидно!) Меньшим потенциалом ошибки. Тем не менее, небольшое улучшение (как вы никогда не использовать x или y):

self.map = [[None for _ in range(width)] for _ in range(height)] 
0

В своем первом коде в первом цикле вы должны быть добавлением пустого списка, а не None. Также вторая версия лучше.

0

Давайте предположим, что размер сетки будет:

size = 4

Теперь мы делаем пустую сетку:

grid = []

for y in range(size): grid = grid + [[]] for x in range(size): grid[y] = grid[y] + [0]

Когда Вы вызываете ваш grid вы должны получить: [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

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