我需要编写两个函数来查找嵌套数字列表的总和,一个使用迭代,一个使用递归。
我已经编写了两个函数,可以成功找到非嵌套数字列表的总和,但我不确定如何使它们遍历嵌套列表。
这是我到目前为止所拥有的:
def iterative_sum(ls:list):
max = len(ls)
i = 0
num_sum = 0
while i < max:
num_sum += ls[i]
i += 1
return num_sum
def recursive_sum(ls:list):
if len(ls)==0:
return 0
else:
return ls[0] + recursive_sum(ls[1:])
num_list = [1, 5, 4, 3, 2, 10, 5]
print("Iterative sum:", iterative_sum(num_list))
print ("Recursive sum:", recursive_sum(num_list))
它对于非嵌套列表非常有用,但如果我的列表也像这样,我需要它才能工作:
num_list = [1, 2, [3, 4], [5, [[6, 7], 8]], 9]
以下内容适用于任意嵌套列表:
def iterative_sum(ls):
s = 0
while ls:
last = ls.pop()
if isinstance(last, int):
s += last
else:
ls.extend(last)
return s
>>> iterative_sum([1, 2, [3, 4], [5, [[6, 7], 8]], 9])
45
def recursive_sum(ls):
if isinstance(ls, int):
return ls
return sum(map(recursive_sum, ls))
>>> recursive_sum([1, 2, [3, 4], [5, [[6, 7], 8]], 9])
45