【问题标题】:IndexError: string index out of range in Python [closed]IndexError:Python中的字符串索引超出范围[关闭]
【发布时间】:2017-05-26 15:07:04
【问题描述】:

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

【问题讨论】:

  • while(i &lt;= len(s)):中删除=
  • 看看为什么会这样:字符串s = 'a'len(s) == 1但在1处没有索引

标签: python python-3.x


【解决方案1】:

while(i &lt;= len(s): 更改为while(i &lt; len(s)):,或更改为while(i &lt;= 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

【讨论】:

  • 并非所有编程语言都是zero-based!在this 中,您可以找到one-based 索引语言的列表。
  • 哦,是的,我的意思是指定 Python。有些是从 1 开始的,例如 TI-BASIC。我现在将对其进行编辑。
【解决方案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++ 的“保留”)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 2022-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多