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

时间:2016-01-17 10:14:13

标签: 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])调用该函数并运行它时,我会收到以下错误消息:

  

列表索引超出范围返回suma(i-1,l)+ l [i]

2 个答案:

答案 0 :(得分:0)

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

>>> 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()始终可以获得长度。

答案 1 :(得分:0)

好的,我将假设这里的意图是以递归方式添加 File folder = new File("C:\my path"); File[] listOfFiles = folder.listFiles(); if (folder.isDirectory()){ if(folder.list().length>0){ System.out.println("Directory is not empty!"); } else { System.out.println("Directory is empty!"); return; //I need to return from the main method } } else{ System.out.println("Invalid directory!"); } 的第一个i元素并返回结果。如果是这样,这里有一个简洁的方法:

l

这相当于:

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