IndexError:列表索引超出范围,可以在Python中查看堆栈

问题描述

class stack():
    def __init__(self):
        self.s=[]
    def push(self,x):
        self.s.append(x)
    def pop(self):
        if self.s==[]:
            return -1
        else:
            return self.s.pop()
    def peek(self):
        return self.s[-1]
    def isempty(s):
        return len(s)
    def size(self):
        return len(self.s)
def printNGE(arr):
    v=[]
    n=len(arr)
    s=stack()
    for i in range(n):
        if s.size()==0:
            v.append(-1)
        elif s.size()>0 and s.peek()>arr[i]:
            v.append(s.peek())
        elif s.size()>0 and s.peek()<=arr[i]:
            while(s.size()>0 and s.peek()<=arr[i]):
                s.pop()
            if s.size==0:
                v.append(-1)
            else:
                v.append(s.peek())
        s.push(arr[i])
        print('s z',s.peek(),s.size())
    return v
arr=[1,3,2,4]
x=printNGE(arr)
print(x)

我正在尝试使用堆栈在python中实现左侧最大的整数,我得到一个eror,如果更改(n-1,-1,-1的循环,则代码对于左侧的最大int可以正常工作)

File "c:\Users\Amit\Desktop\greatrightstak.py",line 42,in <module>
    x=printNGE(arr)
 File "c:\Users\Amit\Desktop\greatrightstak.py",line 35,in printNGE
    v.append(s.peek())
 File "c:\Users\Amit\Desktop\greatrightstak.py",line 13,in peek
    return self.s[-1]
IndexError: list index out of range

解决方法

您只是有一个小错误,缺少括号:

lodash

应该是

if s.size==0: