Mögliches Duplizieren:
Wie teilt man eine Liste in Python in gleich große Teile auf?
Ich bin überrascht, dass ich keine "Batch" -Funktion finden konnte, die als Eingabe eine iterable und eine iterable von iterables zurückgibt.
Zum Beispiel:
for i in batch(range(0,10), 1): print i
[0]
[1]
...
[9]
oder:
for i in batch(range(0,10), 3): print i
[0,1,2]
[3,4,5]
[6,7,8]
[9]
Jetzt schrieb ich, was ich für einen ziemlich einfachen Generator hielt:
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
Aber das Obige gibt mir nicht das, was ich erwartet hätte:
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]
Ich habe also etwas verpasst und dies zeigt wahrscheinlich mein völliges Unverständnis für Python-Generatoren. Möchte mich jemand in die richtige Richtung weisen?
[Bearbeiten: Ich habe schließlich festgestellt, dass das obige Verhalten nur auftritt, wenn ich dies in ipython und nicht in python selbst ausführe]