1
22
|
2
1
作为前言:“list\u comp\u a”测试没有使用列表理解测试列表的构建时间(“iter\u list\u comp\u a”fwiw也没有),测试使用
如果您希望获得一些有意义的结果,那么您希望基准测试的是
处决
一个列表理解、一个生成器表达式和一个生成器函数。为了测试它们的执行情况,最简单的方法是将所有三种情况都封装在函数中,一种是执行列表理解,另两种是从resp生成列表。生成器表达式和从生成器函数生成的生成器)。在所有情况下,我使用
在这里(使用了5年以上的标准桌面上的py 2.7.x),我得到了以下结果:
如您所见,列表理解速度更快,生成器表达式和生成器函数基本上与生成器表达式等效,但与生成器表达式相比有一个非常微小的优势(但如果重复测试,则保持不变)。 现在回答你的主要问题 “为什么以及何时使用生成器”,答案有三个:1/内存使用,2/无限迭代和3/协同路由。
第一点:内存使用。实际上,这里不需要生成器,只需要惰性迭代,它可以通过
writing your own iterable / iterable
-比如说内置的
第二点:无限迭代。在这里,我们有一些从序列类型(列表、元组、集合、dicts、字符串等)中无法获得的东西,根据定义,这些序列类型是有限的。例如
the
请注意,这里的这种能力不是来自生成器函数或表达式,而是来自iterable/iterator协议。与内存使用优化相比,无限迭代的用例明显较少,但当您需要时,它仍然是一个方便的特性。 最后是第三点:协同程序。嗯,这是一个相当复杂的概念,特别是你第一次读到它时,所以我让其他人来做介绍: https://jeffknupp.com/blog/2013/04/07/improve-your-python-yield-and-generators-explained/ 这里有一些只有生成器才能提供的东西,而不是iterables/迭代器的便捷快捷方式。 |
3
0
我想我可能问错了问题。
在原始代码中,它是不正确的,因为
然后,性能如下所示。性能
就像前面提到的@Kishor Pawar一样,该列表的性能更好,但当内存大小不足时
Thx适用于所有人。 当我必须计算大量数据时,生成器更好。 但是 |
A.E · python中具有多个if语句的列表理解 2 年前 |
Aaryan · Python列表:如果没有前缀,则添加前缀 2 年前 |
Semisonic · 如何在列表理解中添加额外的中间步骤? 2 年前 |
Sun Jar · 用Python填写大小不均的列表 2 年前 |
Shuvashish Roy · 将字典列表展平为数据帧列 2 年前 |
MarkS · 列中列表中元素的值计数 2 年前 |