Python中for循环对列表元素累乘时输出为空列表的问题排查
代码问题汇总
- 缩进逻辑完全错误
if(i >= len(IR))下的所有代码都缩进在if块内,而for i in range(len(IR))的遍历范围是0到len(IR)-1,该if条件永远不可能触发,赋值逻辑从未执行,所以y一直是初始的空列表。另外就算if条件成立,break语句会先执行跳出循环,后续赋值也不会运行。 - 变量定义不符合需求
你要实现累乘,y应该是数值类型,初始值要设为x,而不是空列表。你原代码中的赋值逻辑就算运行,也只会把单次乘法结果赋值给y,不会做累积计算。 - 存在多余操作
for i in range(len(IR))会自动递增i的值,不需要手动写i+=1,手动自增会导致跳过下一个索引的元素。i >= len(IR)的判断也属于冗余逻辑,for循环的范围已经做了限制。
正确实现代码
直接遍历元素的写法(更简洁):
x = 0.428571 IR = [3.1,1.5,1.0,1.1,0.8,0.8,1.0,0.8,1.1,1.1,1.2,1.1,1.8,1.5,2.3,1.2,1.0,1.0,0.8,1.4,1.2,0.9,0.7,0.7,0.8,0.9,1.0,0.6,0.9,0.9,1.0,1.4,1.3,1.7,1.3,0.6,1.1,1.1] y = x for rate in IR: y *= rate print(y)
保留索引遍历的写法:
x = 0.428571 IR = [3.1,1.5,1.0,1.1,0.8,0.8,1.0,0.8,1.1,1.1,1.2,1.1,1.8,1.5,2.3,1.2,1.0,1.0,0.8,1.4,1.2,0.9,0.7,0.7,0.8,0.9,1.0,0.6,0.9,0.9,1.0,1.4,1.3,1.7,1.3,0.6,1.1,1.1] y = x for i in range(len(IR)): y *= IR[i] print(y)
内容的提问来源于stack exchange,提问作者GEB
相关产品推荐
相关产品推荐

