我的代码返回
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"]
,但出现错误。如何获得我的代码以达到预期目的?
答案 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)
是奇数时,该函数应该怎么做?