python - 如何测量生成器序列的长度(list comp vs generator expression)

标签 python python-2.7 generator list-comprehension sequences

我有一个生成有限序列的生成器。确定 这个序列的长度我尝试了这两种方法:

 seq_len = sum([1 for _ in euler14_seq(sv)])  # list comp

 seq_len = sum(1 for _ in euler14_seq(sv))    # generator expression

sv 是序列的常量起始值。

我原以为列表理解会更慢,而且 生成器表达式更快,但结果恰恰相反。

我假设第一个会占用更多内存,因为它 首先在内存中创建一个完整的列表——部分原因我也认为它会更慢。

我的问题:这个观察结果可以推广吗?这是由于 在第二个语句和第一个语句中有两个生成器?

我看过这些 What's the shortest way to count the number of items in a generator/iterator? , Length of generator output , 和 Is there any built-in way to get the length of an iterable in python?并看到了一些其他测量序列长度的方法,但我特别好奇列表 comp 与生成器表达式的比较。

PS:当我决定解决 Euler Project #14 时出现了这个问题基于 昨天在 SO 上提出的问题。

(顺便说一句,关于在 不需要变量值的地方)。

这是在 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

关于python - 如何测量生成器序列的长度(list comp vs generator expression),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11353874/

相关文章:

python - for 循环中缺少智能感知和自动补全

python - 数据输入期间Azure ML时间序列模型推理错误(python)

Python webbrowser 模块适用于 Windows 但不适用于 Ubuntu

python - 我的 Google App Engine 代码中的内存泄漏

javascript - 用 IndexedDB 解释如何在这段 JavaScript 代码中使用生成器?

python - 如何在Python中调用多个生成器

python - 按字母顺序排序 URL 以下载图像

python - 整数 : "object() takes no parameters" 的 SQLAlchemy 错误

python - 划分列表并将列表附加到单独的列表python

python - 在Python中传递锁