如何解决“IndexError:从空列表中弹出”Python 3

问题描述 投票:0回答:2

我正在尝试使用堆栈和

pop()
反转一个单词,我相信我忽略了一些东西。这个想法是将单词的所有元素放入一个新列表中,然后弹出它们并将它们放入原始列表中。对于要使用的示例单词,您可以使用“旋转”。以下是我尝试解决它的方法。

def revbystack(x):
  stack = []
  for i in range(len(x)):
    stack.append(x[i])
    for i in range(len(x)):
      x[i] = stack.pop()

word = "rotate"
nw3 = list(word)

revbystack(nw3)
python stack
2个回答
0
投票

您的 for 循环是相互嵌套的。让我们看看您的代码会发生什么情况。

首先,将单词的第一个字符插入堆栈(i = 0)。然后再次执行第二次循环,长度为 x;但是,堆栈中只有一个元素。因此,在第二次循环的第一次迭代之后,堆栈为空。

因此您会收到一条错误消息,提示您正在从空堆栈中弹出。 将来,尝试打印出循环的索引以及您尝试访问的值以查看发生了什么:)


0
投票

你的问题是缩进。取消嵌套 for 循环的凹痕:

def revbystack(x):
    stack = []
    for i in range(len(x)):
        stack.append(x[i])
    for i in range(len(x)):
        x[i] = stack.pop()


word = "rotate"
nw3 = list(word)

revbystack(nw3)
print(nw3)  # ['e', 't', 'a', 't', 'o', 'r']
© www.soinside.com 2019 - 2024. All rights reserved.