如何将发电机拆分成更小的发电机,同时丢弃多余的发电机

问题描述 投票:0回答:1

将大小为 a*n + b 的生成器拆分为 1 个由具有 n 个项目的生成器组成的生成器。有一个类似的问题here,我需要类似的东西

  • 不要预先遍历生成器:计算元素的成本很高,而且只能由消费函数完成,而不是由分块器完成

  • 当然意味着:不要在内存中累积(无列表)

但是不同的是,我不想要剩下的几个元素(如果它们存在)。我尝试过添加这个块

size, it = tee(it) 
size = len(list(size)) 
split = (next(vid) for _ in range(size-size%length))  

但是这仍然需要遍历,这会消耗大量内存并且并不理想。

python generator
1个回答
0
投票

我想你想要:

split = zip(*[it]*n)

这一次从迭代器

n
读取
it
值,并在元组中生成它们。如果迭代器中剩余的值少于
n
,则剩余的值将被丢弃。

它“不太”符合您的要求,因为不可能不提前阅读至少一点点。如果您没有提前读取至少一个完整的块,则在开始使用其中的值之前无法判断最后一个块是否不完整。

© www.soinside.com 2019 - 2024. All rights reserved.