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']但我不知道为什么它显示出界限,抱歉我的英语不好
答案 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]))
希望这有帮助!