Python递归实现列表对应元素相加报错int object is not iterable求助
报错原因
- 直接触发报错的代码行是
return seqaddr(l1[:len(l1)-1],l2[:len(l2)-1]) + list(l1.pop()+l2.pop()):l1.pop()和l2.pop()返回的都是整数类型,两者相加结果仍为整数,list()构造方法要求传入可迭代对象,整数不属于可迭代对象,因此触发int object is not iterable类型错误。 - 代码还存在隐含逻辑问题:递归调用时传入的
l1[:len(l1)-1]是原列表的切片副本,后续pop操作是修改传入函数的原始实参,两者没有关联,即使解决类型报错也得不到预期结果。
修复后的代码
def seqaddr(l1, l2): # 可选参数合法性校验 if len(l1) != len(l2): raise ValueError("两个输入列表必须等长") if len(l1) == 1: return [l1[0] + l2[0]] # 递归处理前n-1位元素,再拼接最后一位相加的结果 return seqaddr(l1[:-1], l2[:-1]) + [l1[-1] + l2[-1]] # 功能测试 print(seqaddr([1,2,3], [4,5,6]))
运行上述代码输出结果为[5, 7, 9],符合预期要求。
内容的提问来源于stack exchange,提问作者Codingbeginner
相关产品推荐
相关产品推荐

