python - python deepsum递归遇到问题,会出现类型错误?
问题描述
所以我正在为我的期末考试练习递归,并试图制作一个 deepsum 函数,它的工作原理如下:
deepsum([1, 2], 3, [4, 6]) => 16
出于某种原因,我不断收到此错误,尽管在跟踪时它似乎是正确的:
在 deepsum 中:
return L[0] + deepsum(L[1:])
TypeError: can only concatenate list (not "int") to list
代码:
def deepsum(L):
if not L:
return 0
if L[0] == type(L):
return deepsum(L[0])
else:
return L[0] + deepsum(L[1:])
请不要有循环的答案;只有递归。谢谢!
解决方案
问题是您检查类型的方式L[0]
,使用isinstance:
def deepsum(L):
if not L:
return 0
if isinstance(L[0], list):
return deepsum(L[0]) + deepsum(L[1:])
else:
return L[0] + deepsum(L[1:])
result = deepsum([[1, 2], 3, [4, 6]])
print(result)
输出
16
另请注意,您必须添加列表其余部分的结果,即deepsum(L[0]) + deepsum(L[1:])
.
推荐阅读
- unity3d - 如何使用统一引擎处理体素图形
- git - 将启用 LFS 的本地 Git 存储库推送到空的 Azure Devops 失败
- python - 使用字典中的值过滤 Spark DataFrame
- powershell - powershell 脚本根据文件名中的特定文本对文件进行分组
- sql - PostgreSQL,Window函数使用问题(附具体例子)
- java - Com.sun.media.jai.Seekablestream 类notfoundexception
- reactjs - React-router:在渲染时有条件地重定向
- sql - 如何在大查询中的 case 语句中使用逐行值?
- mongodb - 如何在pymongo中查找具有两个字段组合的文档
- javascript - 使用 Javascript 复制 HTML 内容,粘贴为格式化文本