Python两列表相加函数运行报错:NameError: name 'R' is not defined
解决Python列表相加代码中的NameError问题
错误原因
你代码里的R是add_lists函数内部的局部变量,仅在函数作用域内有效。调用add_lists(L1, L2)时虽然函数返回了R,但你没有将这个返回值保存到外部变量中,直接在print语句里引用R就会触发NameError——因为外部根本不存在这个变量。
修正方案
有两种简单的修正方式:
方式1:将函数返回值赋值给变量
把函数调用的结果存到一个变量(比如R)里,再在print中使用:
def add_lists(L1, L2): R = [] for i in range(0, len(L1)): R.append(L1[i]+L2[i]) return R L2 = [3, 3, 3, 3] L1 = [1, 2, 3, 4] R = add_lists(L1, L2) # 接收函数返回值 print("Resultant list of: ", str(L1), '& ' + str(L2), 'is', R)
方式2:直接在print中调用函数
不需要额外变量,直接把函数调用作为参数传入print:
def add_lists(L1, L2): R = [] for i in range(0, len(L1)): R.append(L1[i]+L2[i]) return R L2 = [3, 3, 3, 3] L1 = [1, 2, 3, 4] print("Resultant list of: ", str(L1), '& ' + str(L2), 'is', add_lists(L1, L2))
额外优化建议
如果两个列表长度不一致,当前代码会报错。可以改成兼容不同长度的版本:
def add_lists(L1, L2): R = [] # 遍历到两个列表中较长的那个的长度 for i in range(max(len(L1), len(L2))): # 超出长度的列表元素用0补全 val1 = L1[i] if i < len(L1) else 0 val2 = L2[i] if i < len(L2) else 0 R.append(val1 + val2) return R
内容的提问来源于stack exchange,提问作者Faizan Arshad
相关产品推荐
相关产品推荐

