如何避免此处的 'index out of range' 错误?
how do I avoid the 'index out of range' error here?
如何避免我在这个函数中遇到的错误?我真的不明白为什么会出现此错误,我只是想不出解决方案。我将不胜感激任何提示!谢谢。
def myfunction(p):
result = []
count = 1
if not p:
return result
else:
if p[0] == p[1]:
count + 1
return myfunction(p[1:])
else:
result += (p[0],count)
count = 1
return myfunction(p[1:])
函数应该 return 像这样:
myfunction("qqwweerrttyy")
[("q",2),("w",2),("e",2),("r",2),("t",2),("y",2)]
错误是:
File "test.py", line 36, in myfunction
return myfunction(p[1:])
File "test.py", line 32, in myfunction
return myfunction(p[1:])
File "test.py", line 30, in myfunction
if p[0] == p[1]:
IndexError: string index out of range
因为即使 p
可能包含单个元素,您也会索引 p[1]
;您必须确保 p[1]
存在。您可能还想说 count += 1
,而不是 count+1
,这似乎在您提供的代码中没有任何作用。 (我假设 count
和 result
是全局变量;否则代码没有意义。)
这是一个工作代码:
count = 1
result = []
def myfunction(p):
global count
global result
if not p:
return result
else:
if len(p) >= 2 and p[0] == p[1]: # Make sure p[1] exists
count += 1
return myfunction(p[1:])
else:
result += (p[0],count)
count = 1
return myfunction(p[1:])
例如,当给定字符串 "lllalala"
时,输出符合预期:
>>> myfunction("lllalala")
['l', 3, 'a', 1, 'l', 1, 'a', 1, 'l', 1, 'a', 1]
您的函数的第一个问题,即您询问的问题,是这样的:您检查 p
是否为空,然后访问两个元素 p[0]
和 p[1]
。您需要检查 p
是否至少有两个元素才能访问 p[1]
.
if len(p) < 2:
return result
else:
if p[0] == p[1]:
...
修复此问题后,您会发现下一个错误。
如何避免我在这个函数中遇到的错误?我真的不明白为什么会出现此错误,我只是想不出解决方案。我将不胜感激任何提示!谢谢。
def myfunction(p):
result = []
count = 1
if not p:
return result
else:
if p[0] == p[1]:
count + 1
return myfunction(p[1:])
else:
result += (p[0],count)
count = 1
return myfunction(p[1:])
函数应该 return 像这样:
myfunction("qqwweerrttyy")
[("q",2),("w",2),("e",2),("r",2),("t",2),("y",2)]
错误是:
File "test.py", line 36, in myfunction
return myfunction(p[1:])
File "test.py", line 32, in myfunction
return myfunction(p[1:])
File "test.py", line 30, in myfunction
if p[0] == p[1]:
IndexError: string index out of range
因为即使 p
可能包含单个元素,您也会索引 p[1]
;您必须确保 p[1]
存在。您可能还想说 count += 1
,而不是 count+1
,这似乎在您提供的代码中没有任何作用。 (我假设 count
和 result
是全局变量;否则代码没有意义。)
这是一个工作代码:
count = 1
result = []
def myfunction(p):
global count
global result
if not p:
return result
else:
if len(p) >= 2 and p[0] == p[1]: # Make sure p[1] exists
count += 1
return myfunction(p[1:])
else:
result += (p[0],count)
count = 1
return myfunction(p[1:])
例如,当给定字符串 "lllalala"
时,输出符合预期:
>>> myfunction("lllalala")
['l', 3, 'a', 1, 'l', 1, 'a', 1, 'l', 1, 'a', 1]
您的函数的第一个问题,即您询问的问题,是这样的:您检查 p
是否为空,然后访问两个元素 p[0]
和 p[1]
。您需要检查 p
是否至少有两个元素才能访问 p[1]
.
if len(p) < 2:
return result
else:
if p[0] == p[1]:
...
修复此问题后,您会发现下一个错误。