令我惊讶的是,我找不到一个将迭代器作为输入并返回迭代器的“批处理”函数。
例如:
for i in batch(range(0,10), 1): print i
[0]
[1]
...
[9]
或:
for i in batch(range(0,10), 3): print i
[0,1,2]
[3,4,5]
[6,7,8]
[9]
现在,我写了一个我认为非常简单的生成器:
def batch(iterable, n = 1):
current_batch = []
for item in iterable:
current_batch.append(item)
if len(current_batch) == n:
yield current_batch
current_batch = []
if current_batch:
yield current_batch
但上述情况并没有给我带来我所期望的结果:
for x in batch(range(0,10),3): print x
[0]
[0, 1]
[0, 1, 2]
[3]
[3, 4]
[3, 4, 5]
[6]
[6, 7]
[6, 7, 8]
[9]
因此,我遗漏了一些东西,这可能表明我完全不了解 Python 生成器。有人愿意告诉我正确的方向吗?
[编辑: 我最终意识到上面的行为只发生在我在 ipython 而不是 python 本身中运行的时候]