Python3中“字符串索引超出范围”的奇怪解决方案无法找出原因?

2024-09-29 22:22:10 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,我在麻省理工学院6.00.1课程中遇到了一个问题集,我必须确定随机生成的字符串中最长的字母子串(例如“abcdtttyyttt”,最长的字母子串应该是“abcdt”)。在

解决问题的代码如下所示:

s = "abzabc"

longestWord = []
subStr = []

for i in range(len(s)):

    if s[i] >= s[i-1]:           
        subStr += s[i]     

    else:
        subStr = s[i]

    if len(subStr) > len(longestWord):
        longestWord = subStr

print("Longest substring in alphabetical order is: ", "".join(longestWord))

!!!但这是我不明白的!!!

在弄清楚这一点之前,我花了好几个小时研究了一个解决方案,将“s”字符串中的当前字符(我必须检查的随机生成的字符串)与下一个字符进行比较,如下所示:

^{pr2}$

使用这个解决方案,我总是得到一个“字符串索引超出范围”,因为最后一次比较字符串中的字母会超出范围,因为没有任何字母可以检查(s[I]+1部分)。在

那么当我比较s[I]和s[I]-1时,如何避免出现“字符串索引超出范围”错误呢?当然,第一个字母前面没有字母,这意味着我有点“超出范围”?在

希望有人能给我解释一下!我在别的地方都找不到答案。在


Tags: 字符串inlenif字母解决方案字符课程
2条回答

问题是当i为零时,s[i-1]是{}。它不返回字符串开头之前的字符,而是返回字符串的最后一个字符。这可能不是你想要的!在

修复方法可能是回到使用s[i+1],但要使用:

for i in range(len(str)-1):

它将在字符串中的最后一个字符之前停止。在

或者,您可以使用:

^{pr2}$

它将从1开始i(前提是至少有两个字符-您可能需要对一个字符串进行特殊处理)。在

您的代码可以工作,但首先需要指定subStrs[0]值。在

s = "abzabd"

longestWord = ''
subStr = s[0]

for i in range(1, len(s)):

    if s[i] >= s[i-1]:
        subStr += s[i]     

    else:
        subStr = s[i]

    if len(subStr) > len(longestWord):
        longestWord = subStr

print(longestWord)

您可以使用^{}函数,并将keykwarg设置为^{}函数和生成器函数:

^{pr2}$

相关问题 更多 >

    热门问题