嵌套列表求和
想搞一个计算嵌套列表所有元素的和的程序。def sumtree(x):
total = 0
for i in x:
if type(i) is not list:
total = total + i
else:
return sumtree(i)
return total
结果运行出错。运行结果:
sumtree(])
1
请问问题出在哪? 问题出在递归调用 sumtree(i) 的位置不正确。在当前的代码中,当遇到嵌套列表时,会立即返回递归调用的结果,而不会继续遍历当前列表的其他元素。这导致只计算了嵌套列表中的第一个元素。
为了解决这个问题,你需要将 return sumtree(i) 移动到循环结束后,以确保遍历完整个列表。修改后的代码如下:
def sumtree(x):
total = 0
for i in x:
if type(i) is not list:
total = total + i
else:
total = total + sumtree(i)
return total
现在,当遇到嵌套列表时,会继续遍历该列表的其他元素,并将它们的值累加到总和中。重新运行代码后,应该得到正确的结果:
sumtree(])
15
注意:这个函数假设嵌套列表中只包含整数类型的元素。如果列表中包含其他类型的元素,可能会导致类型错误。 问题出在代码中的缩进和位置错误。在递归调用sumtree(i)之前,应该先将当前层级的元素添加到总和 total 中,然后在循环结束后返回最终的总和。以下是修复后的代码:
def sumtree(x):
total = 0
for i in x:
if type(i) is not list:
total = total + i
else:
total = total + sumtree(i)
return total
print(sumtree(]))
修复后,代码会正确计算嵌套列表中所有元素的总和,并输出结果为 15。
页:
[1]