IndexError:Python中的字符串索引超出范围

时间:2017-01-11 17:46:10

标签: python python-3.x

我的代码给出了一个错误,指出索引超出了第9行的范围。这是我的代码:

s = 'aba'
letter = ''
substring = ''

i = 0

while(i <= len(s)):
    prev_letter = s[0]
    letter = s[i]

    if letter <= prev_letter:
        substring += letter
        prev_letter = letter

    i += 1

2 个答案:

答案 0 :(得分:3)

while(i <= len(s):更改为while(i < len(s)):while(i <= len(s)-1):

在Python中,字符串是一维字符数组。 Python编程中的索引从0开始。这意味着任何字符串的最大索引将始终为len(s)-1。在您的代码中,i最终将等于len(s),这是一个高于最大值的元素。

作为旁注,在代码中使用for循环而不是while循环可能会有所帮助。您的代码可以替换为:

s = 'aba'
letter = ''
substring = ''

i = 0

for i in range(len(s)):
    prev_letter = s[0]
    letter = s[i]

    if letter <= prev_letter:
        substring += letter
        prev_letter = letter

答案 1 :(得分:1)

正如其他人所指出的那样,s[s.Length]实际上并不是一个有效的索引;索引在closed interval [0, length - 1]中(即最后一个有效索引是length - 1,第一个索引是0)。请注意,每种语言都不是这样(有些语言的第一个索引是1),但对于Python来说确实如此。

想想阵列是什么以及它是如何实现的:它只是一系列连续的内存位置。索引是初始内存地址的偏移量,项目编号。这就是为什么第一个项目的索引为0 - 没有偏离第一个项目的地址(根据定义)。但是,第5项的地址例如是(address of the first item) + (4 * offset size)。这就是为什么你可以在恒定的时间内访问数组中的任意项。 (这是C / C ++中的“保留”)。