2013-12-10 2 views
0

Прошу прощения за такой глупый вопрос, я не привык к объектно-ориентированному программированию (я исхожу из фона C). Если говорить откровенно, я очень не знаю классов. Прежде всего, это как вы инициализируете атрибут списка и устанавливаете каждый элемент в None?Распечатка 2d-списка в python 2.7

class World: 
    def __init__(self): 
     self.arr = [[None for x in range(20)] for y in range(20)] 

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

+0

Если вы хотите индексировать 2D-массив, рассмотрите возможность использования массива numpy вместо списка списков. – wim

+0

. См. Мой исправленный ответ. – rantanplan

ответ

2

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

Это неправильно путь:

mylist = [[None] * 2] * 2 # Definitely not what you want 

выше это плохо, потому что если вы делаете

mylist[0].append(1) 

Выход будет

[[None, None, 1], [None, None, 1]] 

Причина в том, что мы не создал список из 2 списков, но список с 2 ссылок на список .

Правильный путь будет либо то, что у вас уже есть или:

mylist = [[None] * 20 for i in range(20)] 

Я не уверен, что вы подразумеваете под «хотели проверить, если он был установлен в None».

Что-то вроде этого, например?

w = World() # make a world instance 
print w.arr # This should print your 2d list 
+0

Но будьте осторожны, если бы вы использовали, например, пустой список вместо 'None' в этом примере, каждый элемент был бы * таким же * списком. Чтобы этого избежать, вы должны использовать выражение, которое у вас есть в вопросе. –

+0

Это именно то, что я имел в виду. Спасибо. Я просто хотел убедиться, что он работает нормально. – juice

+0

'Нет * 20' не работает. – user2357112

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