Python:获取生成器中的项目数而不存储项目

时间:2010-06-29 23:22:27

标签: python memory performance generator yield

我有一套用于大量物品的发电机。我想迭代它们一次,将它们输出到一个文件。但是,对于我目前拥有的文件格式,我首先必须输出我拥有的项目数。我不想在内存中构建项目列表,因为它们太多而且需要花费大量的时间和内存。有没有办法迭代生成器,获得它的长度,但不知何故能够在以后再次迭代它,得到相同的项目?

如果没有,我可以为这个问题提出哪些其他解决方案?

3 个答案:

答案 0 :(得分:5)

如果你能弄清楚如何根据控制发生器的参数编写公式来计算大小,那就这样做吧。否则,我认为你不会节省太多时间。

在这里包含生成器,我们会尝试为您完成!

答案 1 :(得分:5)

这不可能。一旦发电机耗尽,就需要重建它以便再次使用。如果事先知道项目数,则可以在迭代器对象上定义__len__()方法,然后可以针对迭代器对象调用len()

答案 2 :(得分:5)

我认为任何通用迭代器都不可能。您将需要弄清楚最初构建的生成器如何,然后为最终传递重新生成它。

或者,您可以在文件中写出虚拟大小,编写项目,然后重新打开文件进行修改并更正标题中的大小。

如果您的文件是二进制格式,这可以很好地工作,因为无论实际大小是多少,大小的字节数都是相同的。如果是文本格式,如果您无法填充虚拟大小以覆盖所有情况,则可能需要为文件添加一些额外长度。有关使用Python在文本文件中插入和重写的讨论,请参阅this question