我的代码给出了一个错误,指出索引超出了第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
答案 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 ++中的“保留”)。