如何修复IndexError:Python中的字符串索引超出范围

时间:2019-04-05 01:48:41

标签: python

我的代码返回

  

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"],但出现错误。如何获得我的代码以达到预期目的?

2 个答案:

答案 0 :(得分:2)

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

您的range升至5

因此i+1中的tokenlist[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

答案 1 :(得分:1)

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

这将具有试图制作tokenlist[5]tokenlist[6]元素的代码,而在处理"abcdef"时,只有tokenlist[0](a)到{ {1}}(f)。

因此,该范围内的该元素不在列表的末尾。

顺便说一句:tokenlist(5)是奇数时,该函数应该怎么做?