【问题标题】:How do I fix IndexError: string index out of range in python如何修复IndexError:python中的字符串索引超出范围
【发布时间】:2019-04-05 01:48:41
【问题描述】:

我的代码返回

IndexError: 字符串索引超出范围

该代码应该将一个字符串分成两个一组并插入到一个列表中,但返回的是错误

def tokenize(tokenlist):
    newList = [] 
    for i in range(1,6,2):
        newList.append(tokenlist[i]+tokenlist[i+1])
    return newList

输入是"abcdef" 和 我期望的输出是列表["ab","cd","ef"],但出现错误。如何让我的代码完成我的预期?

【问题讨论】:

  • Python 有一个official style guide 建议使用四个空格缩进。您不必必须 遵循它,但它比使用单个空格更具可读性。请至少使用两个空格,并保持一致。
  • 字符串索引从 0 开始,而不是 1。顺便说一句,tokenlist[i] + tokenlist[i+1]tokenlist[i:i+2] 相同

标签: python


【解决方案1】:

您的输入长度为 6,因此最后一个索引是 5

您的range 上升到5

所以tokenlist[i+1] 中的i+1 上升到6,这会导致IndexError,因为列表和字符串是从python 中的0 索引的

更正为range(0,6,2)

更好的是,使用 len(tokenlist) 而不是 6。

请注意,如果它是奇怪的,你会得到一个错误。在这种情况下,您应该指定预期的行为。

例如,如果最后一个字符可能单独使用字符串切片:

def tokenize(tokenlist):
    newList = []
    for i in range(0, len(tokenlist), 2):
        newList.append(tokenlist[i: i + 2])
    return newList

在任何情况下,如评论所述,您都应该根据 python 指南重构您的代码。比如

def tokenize(tokenlist):
    newList = []
    for i in range(0, len(tokenlist), 2):
        newList.append(tokenlist[i] + tokenlist[i + 1])
    return newList

【讨论】:

    【解决方案2】:

    查看对range( 1, 6, 2 )的调用。
    i = 5 时会发生什么?

    这将有代码尝试创建tokenlist[5]tokenlist[6] 的元素,而在处理"abcdef" 时,只有元素tokenlist[0] (a) 到tokenlist(5) (f)。

    所以范围内的这个元素不在列表的末尾。

    顺便说一句:当len( tokenlist ) 是奇数时,这个函数应该做什么?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-26
      • 1970-01-01
      • 1970-01-01
      • 2016-01-01
      • 1970-01-01
      • 2019-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多