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

问题描述 投票:0回答:2

我的代码返回

IndexError:字符串索引超出范围

该代码应该将一个字符串分成两组并插入一个列表,而是返回Error

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
2个回答
2
投票

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

你的range上升到5

所以在i+1tokenlist[i+1]上升到6导致IndexError作为列表和字符串从0索引python

正确到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
投票

看看range( 1, 6, 2 )的电话。 i = 5会发生什么?

这将使代码试图制作tokenlist[5]tokenlist[6]的元素,而在"abcdef"上工作时,只有tokenlist[0](a)到tokenlist(5)(f)的元素。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.