2016-07-02 50 views
1

我希望有人可以幫我執行以下操作:收到索引超出範圍的錯誤,但我找不到原因?

我在列舉了一些列出了以下數據 - >一個

A = [[['Ghost Block'], ['Ghost Block'], [-7.0, -30000.0, 84935.99999999991, 1.0, 5.0, 0, 84935.99999999991, 1, 1, ['Ghost', 3, 'Ghost', 'Ghost', 'Ghost', 'Ghost', 2, 'Ghost']], [-5.0, -30000.0, 84935.99999999991, 1.0, 4.0, -30000.0, 114935.99999999991, 2, 1, ['Ghost', 3, 'Ghost', 'Ghost', 'Ghost', 'Ghost', 2, 'Ghost']], [-3.0, 33475.49999999997, 84935.99999999991, 1.0, 3.0, -60000.0, 144935.9999999999, 3, 1, ['Ghost', 3, 'Ghost', 'Ghost', 'Ghost', 'Ghost', 2, 'Ghost']], [-1.0, 80158.49999999997, 84935.99999999991, 1.0, 2.0, -26524.50000000003, 111460.49999999994, 4, 1, ['Ghost', 3, 'Ghost', 'Ghost', 'Ghost', 'Ghost', 2, 'Ghost']], [1.0, 31301.99999999997, 84935.99999999991, 1.0, 1.0, 53633.99999999994, 31301.99999999997, 5, 1, ['Ghost', 3, 'Ghost', 'Ghost', 'Ghost', 'Ghost', 2, 'Ghost']]]] 
TempValue = 0 
Ghost_Block = -60000 
for i in range(0,len(A)): 
    for item in range(0,len(A[i])): 
     if A[i][item] == 'Ghost Block': 
      continue 
     else: 
      if A[i][item][9][0] == 'Ghost': # Neighbor 1 
       TempValue += (Ghost_Block*A[i][item][4]) 

我收到以下錯誤信息:

--> 9    if Value_Spec_Depth[i][item][9][0] == 'Ghost': # Neighbor 1 
IndexError: list index out of range 

根據我Value_Spec_Depth [i] [item] [9] [0]不超出範圍。我希望有人能向我解釋爲什麼我收到這個錯誤。由於

回答

1

對於item01A[i][item]['Ghost Block'],不'Ghost Block'(注意1值列表),讓您的if測試從來沒有通過,轉而執行else塊:

>>> A[0][0] 
['Ghost Block'] 
>>> A[0][1] 
['Ghost Block'] 

作爲結果,else套件嘗試只訪問列表中的索引9。

你會通過實際測試的名單避免這種情況:

if A[i][item] == ['Ghost Block']: 

或測試列表的第一個元素:

if A[i][item][0] == 'Ghost Block': 

注意,您可以剛過名單直接循環,你不需要生成索引。你也不需要使用continue如果你只是測試的

for sublist in A: 
    for element in sublist: 
     if element[0] != 'Ghost Block' and element[9][0] == 'Ghost': 
      TempValue += Ghost_Block * element[4] 

另一項改進是使用自定義類,而不是名單;使用索引的含義並不清楚每個值的含義。

+0

謝謝你,但我想我還是不完全瞭解,因爲我現在想: TempValue = 0 因爲我在Value_Spec_Depth: 的項目中我: 如果項目==「鬼座「: 繼續 其他: 打印項目[9] [0] ,這讓我的errror列表索引超出範圍。我所做的就是基本上你在'and'後面的if語句中的第三行中所說的話。元素[9] [0]在我的代碼中,我把項目[9] [0],但我收到列表索引超出範圍。你能解釋一下嗎? – AlmostGr

+0

@AlmostGr:'if item [0] =='Ghost Block''。 'item'仍然是一個列表。 –

+0

但是它根本沒有看[9](你確定你沒有誤讀'Ghost Block'作爲'Ghost')。因爲在索引9處,項目列表中有一個列表?我不明白[0]如何使我能夠遍歷索引中的其他元素[9]。 – AlmostGr

相關問題