使用列表推导结合两个列表转换时遇'int'对象不可迭代错误求助
解决'int'对象不可迭代的错误
嘿,我来帮你梳理下问题所在!你碰到的这个错误,核心原因是对sum()函数的用法理解有误啦。
先看你的代码:
errors = [sum((i-j)**2) for i,j in zip(y, y_predicted)]
这里(i-j)**2计算出来的是一个单个整数,而sum()函数要求传入的是一个可迭代对象(比如列表、元组、生成器),直接给它一个整数,自然会报“int对象不可迭代”的错误。
接下来分两种常见场景给你解决方案:
场景1:想得到每个对应元素的平方差组成的列表
如果你是要把y和y_predicted中每一对元素的平方差存成一个列表,那完全不需要sum(),直接保留平方差计算就行:
# 得到长度为10的平方差列表 errors = [(i - j)**2 for i, j in zip(y, y_predicted)]
场景2:想计算所有平方差的总和(总平方误差)
如果你的目标是算出所有对应元素平方差的总和,那应该把sum()放在列表推导(或者更高效的生成器表达式)外面:
# 计算总平方误差 total_error = sum((i - j)**2 for i, j in zip(y, y_predicted)) # 或者先生成平方差列表再求和(效率稍低,但逻辑直观) errors = [(i - j)**2 for i, j in zip(y, y_predicted)] total_error = sum(errors)
另外可以确认下y和y_predicted里的元素都是数值类型(比如int、float),只要这点没问题,上面的代码就能正常运行啦。
内容的提问来源于stack exchange,提问作者lighting
相关产品推荐
相关产品推荐

