Ich benutze folgende Funktion, um eine Liste `l` in `num` Teile zu splitten. Das ganze funktioniert wohl wie erwartet, allerdings finde ich die `for` Schleife nicht besonders effizient. Allerdings ergab eine Suche in den üblichen Verdächtigen (itertools usw.) mir keine Idee, wie man das anders machen könnte. Alle Rezepte, die ich fand, erzeugten `x` neue Listen mit einer festen Anzahl an Elementen, wo dann u.U. noch aufgefüllt wurde, wie bei itertools.izip_longest. Aber vielleicht hat ja jemand hier noch eine Idee, wie man das ganze schöner schreiben kann.
Code: Alles auswählen
def chunks(l, num):
"""split a list into num parts. On last turn add all remaining elements"""
step = len(l) // num
for i in xrange(num):
start = step * i
end = step * (i+1)
if i == num - 1:
chunk = l[start::]
else:
chunk = l[start:end]
yield chunk
for chunk in chunks(range(1, 23), 4):
print chunk
Code: Alles auswählen
> python chunks.py
[1, 2, 3, 4, 5]
[6, 7, 8, 9, 10]
[11, 12, 13, 14, 15]
[16, 17, 18, 19, 20, 21, 22]