我一直在学习执行相同任务的不同方法,以及以不同方式编写相同方式执行相同任务。我可以理解执行使用不同方法的代码所花费的时间可能会花费不同的时间来执行,但我不明白为什么在同一方法中执行相同任务但只是以不同方式编写的代码可能会有总执行时间这不是平均相同的。
例如。
我可以跑:
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毫秒。
据我所知,它们都做了同样的操作,因此这提出了几个问题。
我很想知道这是否有原因...
答案 0 :(得分:2)
列表理解更快,因为它是针对python运行的优化c代码。特别要考虑以下几行:
new_list.append(sub)
在循环中迭代时,每次python到达该行时都必须:
locals()
命名空间"点查找" .append
每次都要进行paragraph.getCTP().getPPr().getRPr().isSetB()
,与列表理解相比,它从结构中知道它附加的内容。