Python列表元素求平方根代码返回全None的错误原因排查
代码错误定位与修正方案
具体错误点
- 核心逻辑错误:误判了
list.append()方法的返回值特性- Python的
list.append()是原地修改列表的方法,自身没有显式返回值,调用后固定返回None - 新手最容易在这里踩坑:会下意识以为列表推导式里的append操作,会把最终修改后的
squareRoots列表作为元素收集,但实际上列表推导式只会遍历每个元素,把每一轮执行的表达式的返回值存进新列表。你写的[squareRoots.append(math.sqrt(i)) for i in l]每一轮循环执行的append动作,返回值都是None,最终攒出来的result列表自然全是None。你最后返回result,自然输出[None, None, None]——真正存了平方根的squareRoots列表从头到尾根本没被返回。
- Python的
- 前置依赖遗漏:代码没有导入
math模块,就算修正了返回值的问题,运行时也会触发NameError,无法识别math.sqrt方法。
适配你精简代码思路的正确实现
完全可以去掉冗余的空列表、不必要的append操作,直接把计算逻辑整合到列表推导式里,代码更短也不会出现逻辑偏差:
import math def square_roots(l): return [math.sqrt(i) for i in l] l = [1,2,3] print(square_roots(l))
运行后会正常输出每个元素的平方根结果:[1.0, 1.4142135623730951, 1.7320508075688772]
补充:如果追求极致精简,函数体不需要额外中间变量,直接用列表推导式返回结果即可,完全匹配你最初想写精简代码的目标。
内容的提问来源于stack exchange,提问作者jimmys
相关产品推荐
相关产品推荐

