修复列表索引超出范围异常的最佳方法是什么?

2024-04-19 03:06:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我用Python编写了以下递归代码:

def suma(i,l):
    if i == 0:
        return l[i]
    else:
        return suma(i-1,l)+l[i]

每当我通过suma(3,[7,2,3])调用函数并运行它时,就会收到以下错误消息:

List index out of range on line return suma(i-1,l)+l[i]


Tags: of代码消息indexreturnifondef
2条回答

这是非正统的,但是您可以调用suma()函数,第一个参数减少1:

>>> l = [7, 2, 3]
>>> suma(len(l)-1, l)
12

但最好这样写:

def suma(l):
    if len(l) > 1:
        return suma(l[:-1]) + l[-1]
    return l[0]

>>> suma([7,2,3])
12
>>> suma(range(1,11))
55

这样做的好处是根本不需要将列表的长度传递给sum函数—使用len()始终可以获得长度。你知道吗

好的,我假设这里的目的是递归地添加i的第一个l元素并返回结果。如果是这样,这里有一个简洁的方法:

def suma(i,l):
    return 0 if i == 0 else suma(i-1,l)+l[i-1]

这相当于:

def suma(i,l):
    if i == 0:
        return 0
    else
        return suma(i-1,l)+l[i-1]

相关问题 更多 >