Iterable wird in N Teile geteilt und als Generator zurückgegeben.
Ich habe es verbessert, indem ich auf den im Kommentar angegebenen Link verwiesen habe. Es ist auf 3 Zeilen gekürzt und kann eine unendliche Liste verarbeiten. Iterator mit Python in Blöcke aufteilen
python
import itertools
def splitparN(iterable, N=3):
for i, item in itertools.groupby(enumerate(iterable), lambda x: x[0] // N):
yield (x[1] for x in item)
for x in splitparN(range(12)):
print(tuple(x))
"""
Ausgabe:
(0, 1, 2)
(3, 4, 5)
(6, 7, 8)
(9, 10, 11)
"""
eternal = libs.splitparN(itertools.cycle("hoge"))
print([tuple(next(eternal)) for x in range(4)])
#Ausgabe:[('h', 'o', 'g'), ('e', 'h', 'o'), ('g', 'e', 'h'), ('o', 'g', 'e')]
#itertools.Kann mit Kette rückgängig gemacht werden
print(tuple(itertools.chain.from_iterable(splitparN(range(12)))))
#Ausgabe:(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)