List index out of range Error in python , but index is in range 怎么回事?

List index out of range Error in python ,but index is in range how is it?

def longestValidParentheses(si):
    cnt=0
    s=[]
    for _ in range(0,len(si)):
        s.append(si[_])
    print(s[6])
    for i in range(0,len(s)-1):
     print(i)
     if (s[i]=="("):
      for j in range(0,len(s)):
        if (s[j]==")"):
          cnt+=2
          s.pop(j)
          break
    print(cnt)   
    return cnt

longestValidParentheses(")(())()")

这是我的代码,用于查找有多少个正确形成的括号 但在第二个循环中我收到这样的错误

Traceback (most recent call last): File "F:/yy.py", line 17, in longestValidParentheses(")(())()") File "F:/yy.py", line 9, in longestValidParentheses if (s[i]=="("): IndexError: list index out of range

但列表没有超出范围

您有一个动态变量 (len(s)) 用作范围的上限。快速检查是在弹出后抛出 len(s) 的打印语句。第一次 pop 发生得足够早,以至于您的原始循环仍然有效,但是第二次 pop 时 len(s) = 5,然后当 i 递增到 5 时您尝试访问 s[5]。这是出于边界,因为这两个流行音乐此时已将您的字符串减少为 0、1、2、3、4。

您在这里有两个选择,您可以删除 pop 以便索引在循环中不发生变化,或者您可以修改逻辑(我的第一个想法是一个 while 循环,它不会同时递增或弹出)。

编辑:我知道 JoshuaF 在我之前评论了修复。