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 在我之前评论了修复。
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 在我之前评论了修复。