我的代码返回
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"]
但我得到一个错误。如何让我的代码完成我的预期?
您的输入长度为6,因此最后一个索引是5
你的range
上升到5
所以在i+1
的tokenlist[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
看看range( 1, 6, 2 )
的电话。
i = 5
会发生什么?
这将使代码试图制作tokenlist[5]
和tokenlist[6]
的元素,而在"abcdef"
上工作时,只有tokenlist[0]
(a)到tokenlist(5)
(f)的元素。
所以范围内的这个元素不在列表的末尾。
顺便说一句:当len( tokenlist )
是一个奇数时,这个函数应该做什么?