IndexError:字符串索引超出范围...为什么在这一小段代码中?

时间:2016-06-01 17:32:51

标签: string python-3.x indexoutofboundsexception

s='saamaarrr'
for i in range(0, len(s)-1):
    while(s[i]==s[i+1]):
        i+=1
        print(s[i])

IndexError:字符串索引超出范围

我是python的新手。我知道这个错误的原因。但我不知道为什么会在这里发生。我也读过这个问题的其他答案

3 个答案:

答案 0 :(得分:1)

范围对象包括左边界和排除右边界 如果字符串长度为9个字符,就像在您的情况下一样,范围序列将是:
 0 1 2 3 4 5 6 7 8

让我们来看看当i循环中的变量for达到8时会发生什么。  在while循环中,您需要检查s[8]是否等于s[9]。由于Python中的索引从0开始,与许多其他编程语言一样,字符串s的最后一个字母将具有索引8,这意味着索引9超出了字符串的范围。这会导致错误。

要解决此问题,请按照以下方式进行for循环:

for i in range(0, len(s)-2):

这样,范围序列将为0 1 2 3 4 5 6 7,因此不会导致错误。

此外,您不必将左边界指定为0,它是默认值,因此这也有效:

for i in range(len(s)-2):

答案 1 :(得分:0)

while(s[i] == s[i+1])

这会导致问题,因为当i = len(s)-1时,s [i + 1]将超出范围!

你的for循环内部不需要一个while循环。调整FOR中的范围语句,然后尝试使用if语句......

for i in range(0, len(s)-2):
    If s[i]==s[i+1]:
        print(s[i])

答案 2 :(得分:0)

问题是您要在测试s[i+1]的实际值之前访问i+1的值。我还建议您不要在forwhile循环中使用相同的变量(i)。

结果如下:

s='saamaarrr'
for i in range(0, len(s)-1):
    j = i + 1
    while (j < len(s)) and (s[i]==s[j]):
        print(s[j])
        j+=1

这是输出:

a
a
r
r
r

不知道你想要实现什么,但是......

希望它会有所帮助!