黎子卿 发表于 2023-8-18 13:27:57

嵌套列表求和

想搞一个计算嵌套列表所有元素的和的程序。
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
请问问题出在哪?

isdkz 发表于 2023-8-18 13:28:19

问题出在递归调用 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


注意:这个函数假设嵌套列表中只包含整数类型的元素。如果列表中包含其他类型的元素,可能会导致类型错误。

琅琊王朝 发表于 2023-8-18 13:33:59

问题出在代码中的缩进和位置错误。在递归调用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]
查看完整版本: 嵌套列表求和