2012-12-06 54 views
1

我從來沒有使用2D或3D陣列,但我試圖做一個迷宮。 在我的代碼片段中,正方形是一個單元格的每個實例的列表(所以在3x4迷宮中,將有12個實例在正方形中) 然後,我嘗試追加到行,列表中的所有正方形列表中,所以row [0]將包含前四個方形實例,row [1]將是下四個等等。 row [x] .append(squares [y + z])引發IndexError,我猜測它是行[x]部分,但我不知道該如何解決它。我試着用extend而不是append。Python列表:3D列表的索引錯誤

numberOfRows = 3 
numberOfColumns = 4 
z = 0 

for x in range(numberOfRows): 
    for y in range(numberOfColumns): 
     row[x].append(squares[y+z]) 
    z += 4 
+0

'row'是如何定義的?你需要給我們足夠的代碼才能真正看到它失敗。同時,你證實'square [y + z]'沒有拋出'IndexError'? (你可以添加另一行,只是在'append'行的上面寫上'squares [y + z]',看看是否拋出。) – abarnert

+1

如果你想要多維數組,我建議你仔細觀察numpy。 –

回答

1

如果我猜對了,你想:

numberOfRows = 3 
numberOfColumns = 4 
z = 0 

squares = range(numberOfRows * numberOfColumns) 

row = [[] for _ in xrange(numberOfRows)] 
for x in range(numberOfRows): 
    for y in range(numberOfColumns): 
     row[x].append(squares[y+z]) 
    z += 4 

print row 

即,你只是錯過了row定義。

編輯:

閱讀OP的意見後,似乎需要考慮以下的選擇是值得的局面:

row = [] 
for x in range(numberOfRows): 
    row.append([squares[y+z] for y in range(numberOfColumns)]) 
    z += numberOfColumns 

所以你不要在row創建所有的名單事前。

+0

mmgp的解決方案工作 現在,_只是一個臨時變量,對嗎?像我用x和y? 所以行定義是在行列表中創建列表? – user1880866

+1

如果OP實際上缺少'row'定義,他會得到一個'NameError',而不是'IndexError'。這意味着他顯然沒有向我們展示他的實際代碼,所以這實際上只是猜測他想要的東西 - 並解釋爲什麼他的原始代碼實際上失敗會需要更多的猜測。看起來你已經猜到了,但爲什麼你必須首先猜測呢? – abarnert

+0

@ user1880866 _是一個有效的標識符,它通常用於表示您不關心的某個變量。在Python shell中它有特殊用處,你可以嘗試發現自己。現在,行定義只是創建n個空列表,其中n是numberOfRows。 – mmgp

0

這可以簡化爲以下幾點:

>>> [squares[i:i+numberOfColumns] for i in range(0, len(squares), numberOfColumns)] 
[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]