无法在Python中使用递归调试列表的总和

2024-09-25 08:26:05 发布

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

def sumList(arr):
    items = len(arr)
    if(items == 0):
        return 0
    elif(items == 1):
        return arr[0]
    else:
        return(arr[0] + sumList(arr[1:]))

print(sumList([2, 4, 6, 10, 123]))

如果注释掉“elseif”部分,此代码仍将运行。但是,当最后一个else返回从不存在的索引1开始的列表时,如果只有一个项存在,那么它不应该为最后一种情况给出错误吗


Tags: 代码列表lenreturnifdef错误情况
2条回答

让我们澄清这个问题:你似乎在问为什么这个代码:

def sumList(array):
    items = len(array)

    if items == 0:
        return 0

    if items == 1:
        return array[0]

    return array[0] + sumList(array[1:])

如果/当我们删除第二个条件表达式时仍然有效:

def sumList(array):
    items = len(array)

    if items == 0:
        return 0

    #if items == 1:
    #   return array[0]

    return array[0] + sumList(array[1:])

@Tomothy32提供的答案告诉我们最后一行最终会变成:

return array[0] + sumList([])

由于您的第一个条件表达式,它变成:

return array[0] + 0

在Python 3中,我们可以简单地表示为:

def sumList(array):
    if not array:  # empty containers are false in boolean context
        return 0

    head, *tail = array  # Python 2: head, tail = array[0], array[1:]

    return head + sumList(tail)

切片永远不会给出索引超出范围的错误。例如:

mylist = [1, 2, 3]
print(mylist[10000:])
# []

相关问题 更多 >