Python循环中实现多重求和出现结果翻倍的问题排查
结果翻倍的根因定位
逐行跑通原代码的计算链路,就能定位到结果翻倍的来源:
- 核心问题是循环维度错位:外层遍历每个
j(对应c_var_i的索引)时,内层又把y_t的所有行全部拉进来遍历计算,把不属于当前j的行累加值也纳入了计算范围 - 实际计算过程拆解:
y_t里每一行的元素和为1+2+3+4+5+6=21,因为y_t有2个完全相同的行,内层遍历所有行后生成的列表为[21, 21]- Python中整数与列表相乘是列表重复操作,
c_var_i[j] * [21,21]会把这个列表重复c_var_i[j]次,生成一个更长的列表,之后再对整个长列表做求和 - 最终每个j维度的计算结果为
c_var_i[j] * (21 + 21):j=0时输出420,j=1时输出546,刚好是预期值210、273的2倍。因为y_t刚好有2行,结果自然会被放大一倍。
正确实现方式
去掉跨维度的多余遍历,按索引的对应关系匹配计算项,修正后的代码如下:
c_var_i = [10, 13] y_t = [[1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6]] y = [c_var_i[i] * sum(y_t[i]) for i in range(len(c_var_i))] print(y) # 输出 [210, 273],匹配预期值
- 修正后的逻辑没有多余累加:第0位计算10乘以第一行的和21,得到210;第1位计算13乘以第二行的和21,得到273,完全符合预期。
内容的提问来源于stack exchange,提问作者Shax Studio
相关产品推荐
相关产品推荐

