python - 字符串索引超出范围(Python3)
问题描述
我不断在第 4 行获取字符串索引超出范围(如果 s[i] != s[end-i]:),但我不知道为什么。我在可视化器上运行了我的代码,但这对我没有帮助。在我输入字符串 s 后,该代码应该给我最长的回文子串
这是我的代码:
def isSubPalindrome (s,start,end):
isPal = True
for i in range (start,end):
if s[i] != s[end-i]:
isPal = False
return isPal
def longestPalSubsB (s):
MaxLen = 0
for i in range (len(s)-1):
for j in range (i,len(s)-1):
st = ""
for k in range (i,j):
st = st + s[k]
if isSubPalindrome (st,i,j) == True and len(st)>MaxLen:
MaxLen = len (st)
start = i
end = j
return s[start,end]
s = input("Enter a string: ")
print (longestPalSubsB(s))
Enter a string: aceexcivicgrfdds
Traceback (most recent call last):
File "<ipython-input-6-64661b5bf324>", line 1, in <module>
runfile('/Users/Rayan/Desktop/AUB Spring 2019/EECE 230 /HW/Homework 4/Problem2b.py', wdir='/Users/Rayan/Desktop/AUB Spring 2019/EECE 230 /HW/Homework 4')
File "/anaconda3/lib/python3.7/site-packages/spyder_kernels/customize/spydercustomize.py", line 704, in runfile
execfile(filename, namespace)
File "/anaconda3/lib/python3.7/site-packages/spyder_kernels/customize/spydercustomize.py", line 108, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "/Users/Rayan/Desktop/AUB Spring 2019/EECE 230 /HW/Homework 4/Problem2b.py", line 35, in <module>
print (longestPalSubsB(s))
File "/Users/Rayan/Desktop/AUB Spring 2019/EECE 230 /HW/Homework 4/Problem2b.py", line 24, in longestPalSubsB
if isSubPalindrome (st,i,j) == True and len(st)>MaxLen:
File "/Users/Rayan/Desktop/AUB Spring 2019/EECE 230 /HW/Homework 4/Problem2b.py", line 12, in isSubPalindrome
if s[i] != s[end+1-i]:
IndexError: string index out of range
解决方案
Python给你一个从到包含range(start, end)
的数字序列。例如,是 10、11、12、13。现在考虑这个循环:start
end-1
range(10, 14)
for i in range (start,end):
if s[i] != s[end-i]:
isPal = False
该if
部分,如果使用我的例子range(10, 14)
,是比较s[10] != s[14-10]
高达s[13] != s[14-13]
。显然不是你打算做的。
可能你的意思是:
for i in range(end-start):
if s[start+i] != s[end-i]:
isPal = False
为了解决你的问题,有一个(长的)单线来做:
print(max([s[i:j+1] for i in range(len(s)) for j in range(i+1, len(s)) if s[i:j+1] == "".join(reversed(s[i:j+1]))], key=lambda x: len(x)))
推荐阅读
- java - 在片段中使用 hashmap 和简单适配器
- ios - 快速在每个页面上添加相同的 NavigationBar
- amazon-web-services - 如何以编程方式获取 aws ebs 定价?
- javascript - 承诺链延伸
- asp.net-core - IdentityServer4 中身份验证失败的自定义错误消息
- android - 科尔多瓦网络应用程序
- php - 注意:未定义的偏移量:代码 e 中的 2
- php - PHP 数组使用的内存比它应该使用的多得多
- reactjs - 带有 ContextMenu 的 Cypress 不起作用 - React Contextify
- python - Python-为什么我的 elif 语句没有在考虑负数的递归乘法中得到评估