为什么这出界?蟒蛇

时间:2014-01-24 06:38:08

标签: python indexoutofboundsexception

Enter expression:car.a + var.a
car   Variable
.   Variable
a   Variable
+   operator
var   Variable
.   Variable
a   Variable
Traceback (most recent call last):
  File "D:\My Documents\Python\Lexical analyzer.py", line 62, in <module>
    if(check_main(temp[i]) == 'Variable'):
IndexError: list index out of range

for i in range(1,len(temp),2):
if temp[i] == '.':
    if check_main(temp[i-1])=='Variable':
        temp[i-1:i+2]= [''.join(temp[i-1:i+2])]

列表是正确的['car.a','+','var.a']但我不知道为什么它显示出界限,抱歉我的英语不好

1 个答案:

答案 0 :(得分:7)

它没有债券,因为你在迭代它的长度时修改列表。问题出在这一行:

temp[i-1:i+2]= [''.join(temp[i-1:i+2])] 

在这里,您将曾经的三个项目更改为仅一个项目。因此,当您迭代它时,列表的长度实际上会缩短!很奇怪,是吗?有一段时间temp[i]将不再有效,因为i已经大于当前len(temp)

你遇到这样的事情:

>>> l = [1, 2, 3, 4, 5]
>>> l[1:4] = [1]
>>> l
[1, 1, 5]

解决方案?我不建议修改列表,而是建议您创建一个新列表。也许是这样的:

if check_main(temp[i-1])=='Variable':
    new_list.append(''.join(temp[i-1:i+2]))

希望这有帮助!