2013-09-27 2 views
0

Я хочу объявить и заполнить 2d массив в Python следующим образом:Декларирование и заполнение 2D массива в Python

def randomNo(): 
rn = randint(0, 4) 
return rn 

def populateStatus(): 
status = [] 
status.append([]) 
for x in range (0,4): 
    for y in range (0,4): 
     status[x].append(randomNo()) 

Но я всегда получаю IndexError: индекс списка из диапазона исключения. Есть идеи?

+0

Возможный дубликат [Как определить двумерный массив в python] (http://stackoverflow.com/questions/6667201/how-to-define-two-dimensional-array-in-python) – gst

ответ

1

Единственный раз, когда вы добавляете 'rows' в массив состояния, перед внешним циклом.
So - status[0] есть но status[1] нет.
вам нужно переместить status.append([]), чтобы быть внутри внешнего цикла, а затем он создаст новую «строку», прежде чем пытаться ее заполнить.

2

Вы не увеличить количество строк в status для каждого значения x

for x in range(0,4): 
    status.append([]) 
    for y in range(0,4): 
     status[x].append(randomNo()) 
2

Попробуйте это:

def randomNo(): 
    rn = randint(0, 4) 
    return rn 

def populateStatus(): 
    status = {} 
    for x in range (0,4): 
    status [x]={} 
    for y in range (0,4): 
     status[x][y] = randomNo() 

Это даст вам 2D словарь, который вы можете получить доступ, как val=status[0,3]

+0

Я должен отметить , за 5 лет с тех пор, как я опубликовал это, я пришел к выводу, что использование dicts для массивов не всегда является самым эффективным способом делать вещи. – Shayne

0

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

import numpy as np 
np.random.randint(0,4, size=(4,4)) 

Это дает непосредственно

array([[3, 0, 1, 1], 
     [0, 1, 1, 2], 
     [2, 0, 3, 2], 
     [0, 1, 2, 2]]) 
0

Более "современный питона" способ делать вещи.

[[ randint(0,4) for x in range(0,4)] for y in range(0,4)] 

Его просто пара вложенных списков.

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