2014-12-21 85 views
0

我是新來的Python,我試圖將元素添加到3D名單。添加元素爲3D陣列中的蟒蛇

def getHoughSpace(self): 
     space = [[[]]] 
     for i in range(0, len(self.xs)): 
      rho = self.getRho(self.xs[i], self.ys[i], self.zs[i]) 
      space.append([Cell(rho, 0)]) 
      for j in range(0, len(self.ys)): 
       theta = self.getTheta(self.xs[j], self.ys[j], self.zs[j]) 
       space[i].append([Cell(theta, 0)]) 
       for k in range(0, len(self.zs)): 
        phi = self.getPhi(self.xs[k], self.ys[k]) 
        space[i][j].append([Cell(phi, 0)]) # error happens here 

然而,當i=1j=0k=0,我的程序崩潰與錯誤:

AttributeError: Cell instance has no attribute 'append' 

這究竟是爲什麼?我怎樣才能獲得通過i=0j=0k=0而不當i=1?顯然,我正在訪問一個單元格space[i][j],但我想訪問Cells列表。

  • 有趣的是,如果我註釋掉錯誤行,它會運行。那麼爲什麼這個問題只發生在第三維?

回答

1

你可能想在最後附加元素,三維列表:

space = [] 
space.append([]) 
space[i].append([]) 
space[i][j].append(<element>) 

或者你可以使用numpy

import numpy as np 
space = np.empty((len(self.xs), len(self.ys), len(self.zs)), dtype=object) 
+0

我使用numpy的得到它的工作。我會注意到你不能再使用append了,你已經分配了一個數組。你必須使用'space [i] [j] [k] = Cell(phi,0)'。 –

+0

@TrevorHutto問題,與原來的程序是:'space.append([細胞(RHO,0)])'這擾亂列表的維數,如果打印它,你可以看到另一個'list'被添加作爲元件而不是'列表清單'。 –