gpt4 book ai didi

python - 为什么我的列表不会填充?索引错误 : List Out of Range

转载 作者:太空宇宙 更新时间:2023-11-03 11:05:38 25 4
gpt4 key购买 nike

阅读 Stacks,所以我尝试了这个 Infix to Postfix 练习(找到 here )。您必须稍微滚动一下才能看到他们的代码。我尽量忠实于他们最初的实现。

我的代码:http://pastebin.com/dG4Ku14n

我在第 18 行(定义 peek 变量的地方)遇到错误。它说该列表超出范围但我不应该调用该列表?它不应该只存储在变量中,当我在第 49 行使用“prec[peek]”时,实际错误应该出现在文档中吗?

我敢肯定这段代码比我意识到的要复杂得多。任何帮助,将不胜感激。我应该重新开始吗?

简短版:

peek = operator_stack[len(operator_stack)-1]
for element in infix:
if:
#code
else:
while not operator_stack and prec[peek] >= prec[element]:
output_queue.append(operator_stack.pop())
operator_stack.append(element)

预期输出:

A B * C + D *

最佳答案

不幸的是,你的 operator_stack 列表是空的,因此它返回一个 IndexError 顺便说一句,如果你想找到列表的最后一个元素,请使用并确保它到 如果它是空的:

所以使用:

peek = operator_stack[-1] if operator_stack else None

代替:

peek = operator_stack[len(operator_stack)-1]

此外,在调试代码时,从注释中可以清楚地看到这些行:

第 49 行:虽然不是 operator_stack 和 prec[peek] >= prec[element]:

第 59 行:while not operator_stack:

实际上应该是这样的:

第 49 行:while operator_stack and prec[peek] >= prec[element]:

第 59 行:while operator_stack:

最后添加一个 if 语句来检查 peek 是否为 None

一个简短的版本是

#line 18
peek = operator_stack[-1] if operator_stack else None
#line 49
if peek is not None:
while operator_stack and prec[peek] >= prec[element]:

#Append the pop'd element of the operator stack to the
#output_queue list.
output_queue.append(operator_stack.pop())

#Append whatever is left (+,-,*,/) to the operator stack
operator_stack.append(element)

#line 59
while operator_stack:
#Append the last element in the stack until the stack is empty.
output_queue.append(operator_stack.pop())

如果你doubt while operator_stack: 是什么意思,看这个简单的例子:

>>> a = [2,5,6]
>>> while a: # a is not empty right?
... print 2 # so print 2
... break # and break
2

关于python - 为什么我的列表不会填充?索引错误 : List Out of Range,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20129563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com