鱼C论坛

 找回密码
 立即注册
查看: 1566|回复: 2

[已解决]嵌套列表求和

[复制链接]
发表于 2023-8-18 13:27:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
想搞一个计算嵌套列表所有元素的和的程序。
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,2,[3,4,5]])
1
请问问题出在哪?
最佳答案
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([1,2,[3,4,5]])
15

注意:这个函数假设嵌套列表中只包含整数类型的元素。如果列表中包含其他类型的元素,可能会导致类型错误。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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([1,2,[3,4,5]])
15

注意:这个函数假设嵌套列表中只包含整数类型的元素。如果列表中包含其他类型的元素,可能会导致类型错误。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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([1,2,[3,4,5]]))
修复后,代码会正确计算嵌套列表中所有元素的总和,并输出结果为 15。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-25 11:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表