如何对含嵌套列表的列表求和?递归实现报TypeError如何修复
嵌套列表递归求和函数报错问题排查与修复
核心报错成因
- 列表类型判断逻辑完全失效
你写的判断条件type(lst[i]) == "list"永远无法匹配真实的列表类型:type()函数返回的是Python内部的类型对象(检测列表时会返回<class 'list'>),和字符串形式的"list"不存在相等关系。 - 由于判断逻辑不生效,所有嵌套的列表元素都不会进入递归求和分支,全部会走到直接累加的逻辑,把列表对象和初始值为0的整数做加法,自然触发
int类型无法和list类型相加的类型错误。
具体修复方案
需要调整三处细节来让函数正常工作:
- 替换失效的类型判断:推荐使用
isinstance(元素, list)做类型检测,这种写法兼容性更好,还能兼容继承自list的自定义类场景,比直接对比类型对象更符合Python编码规范 - 把临时累加变量
sum改名为total,避免覆盖Python内置的sum函数,避免后续使用时出现意料之外的问题 - 循环可以直接遍历列表元素,不需要通过
range(len(lst))做下标索引取值,代码更简洁易读
修复后的可直接运行代码:
def sum_list_recursive(lst): total = 0 for item in lst: if isinstance(item, list): total += sum_list_recursive(item) else: total += item return total
验证效果
- 常规双层嵌套测试:
sum_list_recursive([1,2,[3,4],[5,6]])可正确返回结果21 - 多层深度嵌套测试:
sum_list_recursive([1, [2, [3, 4], 5], 6])可正确返回结果21,满足任意深度嵌套列表的求和需求
补充注意:如果列表中嵌套了数值、列表之外的其他类型元素,仍会触发类型错误,使用前需要确认列表内所有非嵌套元素均为可累加的数值类型。
内容的提问来源于stack exchange,提问作者helpme
相关产品推荐
相关产品推荐

