将大小为 a*n + b 的生成器拆分为 1 个由具有 n 个项目的生成器组成的生成器。有一个类似的问题here,我需要类似的东西
不要预先遍历生成器:计算元素的成本很高,而且只能由消费函数完成,而不是由分块器完成
当然意味着:不要在内存中累积(无列表)
但是不同的是,我不想要剩下的几个元素(如果它们存在)。我尝试过添加这个块
size, it = tee(it)
size = len(list(size))
split = (next(vid) for _ in range(size-size%length))
但是这仍然需要遍历,这会消耗大量内存并且并不理想。
我想你想要:
split = zip(*[it]*n)
这一次从迭代器
n
读取 it
值,并在元组中生成它们。如果迭代器中剩余的值少于 n
,则剩余的值将被丢弃。
它“不太”符合您的要求,因为不可能不提前阅读至少一点点。如果您没有提前读取至少一个完整的块,则在开始使用其中的值之前无法判断最后一个块是否不完整。