使用不同方法获得相同结果时的性能差异

2024-04-20 11:49:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在学习执行同一任务的不同方法,以及以不同的方式执行同一任务。我可以理解执行使用不同方法的代码所需的时间可能会有不同的执行时间,但我不明白为什么在同一方法中执行相同任务但只是编写不同的代码的总执行时间平均不相同

例如

我能跑:

for sub in original_list:
    if sub[0] in to_check:
        new_list.append(sub)

在我的一段代码中,我的平均执行时间大约是2.6毫秒

但是,如果我将代码更改为一行代码,如下所示:

new_list = [sub for sub in original_list if sub[0] in to_check]

执行时间平均为2.4毫秒

据我所知,这两者的操作是一样的,因此引出了几个问题

  1. 时间的变化从何而来
  2. 是缩放吗?例如,如果我迭代一个非常大的列表,时间差会变得更大还是会保持在0.10毫秒左右
  3. 或者我只是很困惑,这两个操作并不像我原来想的那样完全相同

我很想知道这是否有原因


Tags: to方法代码in列表newforif
1条回答
网友
1楼 · 发布于 2024-04-20 11:49:11

列表理解更快,因为它是针对python运行的优化c代码。尤其要考虑以下几行:

 new_list.append(sub)

在循环中迭代时,每次python到达该行时,它必须:

  1. locals()命名空间中查找新的\u列表
  2. 查找该对象上的append方法(hash lookup!)
  3. 调用append函数

与列表理解相比,.append的“点查找”每次都在进行,而列表理解是从它所附加的结构中知道的

相关问题 更多 >