如何避免此处的 '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,这似乎在您提供的代码中没有任何作用。 (我假设 countresult 是全局变量;否则代码没有意义。)

这是一个工作代码:

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]:
        ...

修复此问题后,您会发现下一个错误。