Lev*_*von 2 python sequences list-comprehension generator python-2.7
我有一个生成有限序列的生成器.为了确定这个序列的长度,我尝试了这两种方法:
seq_len = sum([1 for _ in euler14_seq(sv)]) # list comp
Run Code Online (Sandbox Code Playgroud)
和
seq_len = sum(1 for _ in euler14_seq(sv)) # generator expression
Run Code Online (Sandbox Code Playgroud)
sv 是序列的常量起始值.
我原本以为列表理解会慢一点,生成器表达式会更快,但事实证明相反.
我假设第一个会占用更多的内存,因为它首先在内存中创建一个完整的列表 - 部分原因我还认为它会更慢.
我的问题:这种观察是否可以推广?这是因为第二个声明与第一个声明中涉及两个发生器吗?
我看过这些什么是计算生成器/迭代器中项目数的最短方法?,生成器输出的长度, 是否有任何内置的方法来获取python中迭代的长度?并且看到了一些测量序列长度的其他方法,但我对list comp与generator表达式的比较特别好奇.
PS:当我决定根据昨天提出的问题解决欧拉项目#14时出现了这个问题.
(顺便说一句,关于使用'_'不需要变量值的地方的一般感觉是什么).
这是在Windows 7 64位下使用Python 2.7.2(32位)完成的
在这台计算机上,生成器表达式在100,000到1,000,000之间变得更快
$ python -m timeit "sum(1 for x in xrange(100000))"
10 loops, best of 3: 34.8 msec per loop
$ python -m timeit "sum([1 for x in xrange(100000)])"
10 loops, best of 3: 20.8 msec per loop
$ python -m timeit "sum(1 for x in xrange(1000000))"
10 loops, best of 3: 315 msec per loop
$ python -m timeit "sum([1 for x in xrange(1000000)])"
10 loops, best of 3: 469 msec per loop
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3265 次 |
| 最近记录: |