Python中两列表(数组)相加返回None的原因及解决方法
Python列表对应元素相加返回None的问题排查与修复
第一段代码的问题
def add2NumberArrays(a,b): res = [] for i in range(0,len(a)): return res.append(a[i] + b[i]) a = [4,4,7] b = [2,1,2] print(add2NumberArrays(a,b))
- 两个核心错误:
append()方法返回None:list.append()是原地修改列表的操作,它本身的返回值就是None,你直接把这个返回值作为函数结果返回,自然得到None。- 循环一次就提前终止:第一次进入循环就执行
return,函数直接结束,根本没机会处理列表里的其他元素。
第二段代码的问题
def add2NumberArrays(a,b): for i in range(0,len(a)): res = [] ans = res.append(a[i]+b[i]) return ans a = [4,4,7] b = [2,1,2] print(add2NumberArrays(a,b))
- 旧问题没解决,还新增了错误:
- 每次循环重置列表:
res = []放在循环内部,每一轮循环都会把res重新置为空列表,最后循环结束时res里只会保留最后一个元素的相加结果。 - 依旧错误获取append的返回值:
ans = res.append(...)还是拿到了None,最终返回的ans自然也是None。
- 每次循环重置列表:
正确写法
方法1:修复原有逻辑的常规循环
def add2NumberArrays(a,b): res = [] for i in range(len(a)): res.append(a[i] + b[i]) return res # 循环遍历完所有元素后,再返回完整的结果列表 a = [4,4,7] b = [2,1,2] print(add2NumberArrays(a,b)) # 输出: [6,5,9]
方法2:用zip实现更简洁的写法
如果两个列表长度相同,用zip直接配对元素,代码更符合Python风格:
def add2NumberArrays(a,b): return [x + y for x, y in zip(a, b)] a = [4,4,7] b = [2,1,2] print(add2NumberArrays(a,b)) # 输出: [6,5,9]
额外提示:处理长度不同的列表
如果两个列表长度不一致,可以补0对齐后再相加:
def add2NumberArrays(a,b): max_len = max(len(a), len(b)) a += [0]*(max_len - len(a)) b += [0]*(max_len - len(b)) return [x + y for x, y in zip(a, b)]
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

