鱼C论坛

 找回密码
 立即注册
查看: 1236|回复: 4

list.append() 与 list.insert() 效率比较

[复制链接]
发表于 2019-12-31 22:09:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 zltzlt 于 2019-12-31 22:11 编辑

来看一段代码:

  1. >>> count = 10 ** 5
  2. >>> nums = []
  3. >>> for i in range(count):
  4.         nums.append(i)

  5.         
  6. >>> nums.reverse()
复制代码


这段代码只是简单地讲一堆数字添加到一个最初为空的列表中,然后反转该列表。

为了使代码看起来更简洁,我们产生了一个想法:与其到最后才将整个列表反转,不如将数字插到列表的头部。于是,代码可以被精简成这样:

  1. >>> count = 10 ** 5
  2. >>> nums = []
  3. >>> for i in range(count):
  4.         nums.insert(0, i)
复制代码


乍一看这段新代码似乎还挺不错。可是如果你去试试这段代码,就会发现其实速度反而是明显变慢了。

不妨测试一下用时:

  1. >>> def fun1():
  2.         count = 10 ** 5
  3.         nums = []
  4.         for i in range(count):
  5.                 nums.append(i)
  6.         nums.reverse()

  7.        
  8. >>> def fun2():
  9.         count = 10 ** 5
  10.         nums = []
  11.         for i in range(count):
  12.                 nums.insert(0, i)

  13.                
  14. >>> def test(func):
  15.         start = time.perf_counter()
  16.         func()
  17.         return time.perf_counter() - start

  18. >>> test(fun1)
  19. 0.007754699999992454
  20. >>> test(fun2)
  21. 1.821296799999999
复制代码


“不测不知道,一测吓一跳”,没想到第二段代码比第一段代码慢了 200 多倍!

所以这时候,我们的选择就会比任何时候都重要。

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-31 22:26:31 From FishC Mobile | 显示全部楼层
效率这么悬殊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-12 07:46:19 | 显示全部楼层
我想是因为新元素直接插到第一个位置,后面所有元素都要往后移。多次后移操作导致效率下降
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-12 13:21:38 | 显示全部楼层
有理由相信 发表于 2020-2-12 07:46
我想是因为新元素直接插到第一个位置,后面所有元素都要往后移。多次后移操作导致效率下降

有道理
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-20 13:52:45 | 显示全部楼层
time.perf_counter() 和 time.time() 有什么区别?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-12 05:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表