我有一个生成有限序列的生成器。为了确定这个序列的长度,我尝试了这两种方法:
seq_len = sum([1 for _ in euler14_seq(sv)]) # list comp
和
seq_len = sum(1 for _ in euler14_seq(sv)) # generator expression
sv
是序列的恒定起始值。
我曾预计列表理解会更慢,而生成器表达式会更快,但结果恰恰相反。
我认为第一个会占用更多的内存,因为它首先在内存中创建了一个完整的列表——我也认为它会更慢的部分原因。
我的问题:这个观察可以概括吗?这是因为第二个语句与第一个语句中涉及两个生成器吗?
我看过这些计算生成器/迭代器中项目数量的最短方法是什么?,生成器输出的长度,以及 是否有任何内置方法可以在 python 中获取可迭代的长度?并看到了一些其他测量序列长度的方法,但我特别好奇 list comp 与生成器表达式的比较。
PS:当我根据昨天在 SO 上提出的问题决定解决Euler Project #14时,就出现了这个问题。
(顺便说一下,'_'
在不需要变量值的地方使用 in 的一般感觉是什么)。
这是在 Windows 7 64 位下使用 Python 2.7.2(32 位)完成的