使用for i in range(len(nums))每次迭代都算nums长度吗?两段代码效率是否一致?
两段Python代码的效率对比结论
二者运行效率几乎没有可感知的差异,严格从底层执行逻辑来看,第一段代码的效率还要略微高一点点,但差距极小,日常开发完全可以忽略。
具体原因说明
- Python中列表属于内置序列类型,
len()是O(1)时间复杂度的操作:列表的长度会直接预存在底层结构体中,调用len(nums)不需要遍历列表统计元素,只是直接读取预存的数值,本身开销就极低。 range()的入参是在循环启动前一次性计算完成的,不会在每次循环迭代时重复计算,所以第一段代码里的len(nums)只会执行1次,和第二段提前把长度赋值给length变量的做法,调用len()的次数完全一致。- 第二段代码唯一多出的操作是把
len(nums)的返回值赋值给了length局部变量,这一步只有可以忽略不计的额外开销,实际运行时完全感知不到差别。
更推荐的写法
如果要遍历列表同时获取索引和对应元素,更符合Python风格的写法是使用enumerate,可读性更高,执行效率也没有损失:
nums = [3,2,1,5,6,4] for idx, num in enumerate(nums): print(idx, num)
内容的提问来源于stack exchange,提问作者Venkata Raman
相关产品推荐
相关产品推荐

