【发布时间】:2020-02-14 10:35:25
【问题描述】:
只是想问一下这是为什么(如果我没记错的话,请列出理解):
def s(number):
return sum([n for n in range(number) if n%3==0 or n%5==0])
s(100)
速度是这个(202 步)的两倍(可视化 python 108 步):
def s(number):
return sum(n for n in range(number) if n%3==0 or n%5==0)
s(100)
?
而且,虽然第一个代码更快,但第二个代码在任何情况下都有什么优势吗?也许,使用更少的内存?只是吐口水,真的不知道我在说什么。任何澄清将不胜感激。
【问题讨论】:
-
第一个是在内存中创建一个完整的列表,然后再次遍历该列表到
sum它。第二个sums 项目直接由生成器表达式生成。第一个效率较低,但由于执行的可视化方式,第二个可能被可视化为采取更多步骤……顺便说一句,请链接到该可视化器…… -
@John Doe 您是否对这两个功能进行了基准测试?当我
timeit时,我没有看到太大的不同。可能是可视化器中显示的步骤完全取决于代码的可视化方式?(即,不是性能) -
"列表理解更快,因为它针对 Python 解释器进行了优化,可以在循环期间发现可预测的模式。"见这篇文章:click here
-
@deceze 这是链接:pythontutor.com/visualize.html#mode=display
-
@abdulNiyasPM 我实际上并没有“计时”,只是在上面提供的链接上将其可视化。看来我应该有。那么这两种方法在性能/内存使用方面完全相同吗?
标签: python list list-comprehension