索引器错误:Python中的字符串索引超出范围

2024-05-06 02:09:22 发布

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

我的代码在第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

Tags: 代码lenifsubstringletterwhileprevaba
2条回答

正如其他人所指出的,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++中的“保留”)。

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

在Python中,字符串是一个一维字符数组。Python编程中的索引从0开始。这意味着any字符串的最大索引将始终为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

相关问题 更多 >