gpt4 book ai didi

关于推导式与列表推导式的 Python 快速问题

转载 作者:行者123 更新时间:2023-12-02 11:16:42 25 4
gpt4 key购买 nike

只是想问为什么会这样(列表理解,如果我没记错的话):

def s(number):
return sum([n for n in range(number) if n%3==0 or n%5==0])
s(100)

比这个(202 步)快两倍(108 步可视化 python):
def s(number):
return sum(n for n in range(number) if n%3==0 or n%5==0)
s(100)

?

而且,虽然第一个代码更快,但第二个代码在任何情况下都有什么优势吗?也许,使用更少的内存?只是吐口水,真的不知道我在说什么。任何澄清将不胜感激。

最佳答案

您的两个片段的性能非常相似,显然并非每一步都是平等的。对于 number 的小值第一个代码(列表)稍微快一点,但对于更大的 number第二个代码(生成器)获胜。

另一件事是内存使用 - 创建一个列表需要与其大小成正比的内存量,所以更大 number消耗更多的内存。此外,随着列表的增长,它需要内存重新分配,这最终会触发垃圾收集器( timeit() 默认情况下禁用 gc ,重整结果)。
另一方面,生成器版本对任何 number 使用相同(最小)的内存量。 .

结论是您应该尽可能使用生成器表达式。当您关心内存占用和/或操作大量数字时,这一点尤其重要。此外,这样你的代码会更短更干净(有争议)。

此主题在 PEP 289 中有解释,介绍生成器表达式。

关于关于推导式与列表推导式的 Python 快速问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60224607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com