尝试访问最后一个索引时出现索引超出范围错误

Onu*_*bek 1 python index-error

我正在执行leetcode,我的代码给了我我无法理解的错误。我被要求反转整数,这很容易做到。这些是测试用例:

Example 1:

Input: 123
Output: 321

Example 2:

Input: -123
Output: -321

Example 3:

Input: 120
Output: 21
Run Code Online (Sandbox Code Playgroud)

我发现我所需要的只是if语句来检查输入的条件,所以这就是我所做的:

class Solution:
    def reverse(self, x: int) -> int:
        string = str(x)
        lst = list(string)

        lst.reverse()

        if((lst[0]) == '0'):
            lst.pop(0)

        if((lst[-1] == '-')):
            lst.pop(-1)
            lst.insert(0, '-')

        output = ''.join(lst)

        return output
Run Code Online (Sandbox Code Playgroud)

但是这一行if((lst[-1] == '-')):抛出一个IndexError: list index out of range错误。我正在做的是访问列表的最后一个元素。我不尝试访问不存在的索引。

我唯一需要知道的是为什么会发生此错误。因为这是leetcode,所以我想自己修复该代码。

最终密码

class Solution:
    def reverse(self, x: int) -> int:
        lst = list(str(x))

        lst.reverse()

        if(x < 0):
            lst.pop(-1)
            lst.insert(0, '-')

        int_output = int(''.join(lst))

        if(int_output < (2**32)):
            return int_output
        else:
            return 0
Run Code Online (Sandbox Code Playgroud)

Bar*_*mar 5

如果lst为空,将发生此错误,因为任何索引都将超出范围。

如果x是原来的话"0",那lst将是["0"]。然后,第一条if语句将删除该"0"元素,因此现在是[],这是一个空列表,您将收到该错误。

如果您正在执行7.反向整数,则还有其他问题。它说结果应该是整数,但是您要返回一个字符串。您还只能删除第一个0。如果输入为12000,则返回"0021"而不是21