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]))
如果“ else if”部分被注释掉,此代码仍将运行。但是,当仅存在一个项时,最后一个else
是否不应该为最后一种情况给出错误,因为它正在返回从索引1开始的列表(不存在)?
答案 0 :(得分:3)
切片将永远不会给出索引超出范围的错误。例如:
mylist = [1, 2, 3]
print(mylist[10000:])
# []
答案 1 :(得分:0)
让我们澄清一个问题:您似乎在问为什么使用此代码:
def sumList(array):
items = len(array)
if items == 0:
return 0
if items == 1:
return array[0]
return array[0] + sumList(array[1:])
如果/当我们删除 second 条件表达式时,仍然有效:
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([])
由于您的 first 条件表达式,其变为:
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)