收到索引超出范围错误,但我找不到原因?
Index out of range error received, but I can't find out why?
我希望有人能在以下方面帮助我:
我在列表中的某些列表中有以下数据 --> A
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] 没有超出范围。我希望有人可以向我解释为什么我会收到此错误。谢谢
对于 item
值 0
和 1
,A[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
如果你只是测试 inverse:
for sublist in A:
for element in sublist:
if element[0] != 'Ghost Block' and element[9][0] == 'Ghost':
TempValue += Ghost_Block * element[4]
另一个改进是使用自定义 类 而不是列表;使用索引根本不清楚每个值的含义。
我希望有人能在以下方面帮助我:
我在列表中的某些列表中有以下数据 --> A
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] 没有超出范围。我希望有人可以向我解释为什么我会收到此错误。谢谢
对于 item
值 0
和 1
,A[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
如果你只是测试 inverse:
for sublist in A:
for element in sublist:
if element[0] != 'Ghost Block' and element[9][0] == 'Ghost':
TempValue += Ghost_Block * element[4]
另一个改进是使用自定义 类 而不是列表;使用索引根本不清楚每个值的含义。