iterableを入力として受け取り、iterableのiterableを返す「バッチ」関数が見つからなかったことに驚いています。
例えば:
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ジェネレーターの私の完全な理解の欠如を示しています。誰かが私を正しい方向に向けることを気にかけますか?
[編集:上記の動作は、Python自体ではなくipython内で実行した場合にのみ発生することに最終的に気付きました]