Iterable est divisé en N pièces et renvoyé sous forme de générateur.
Je l'ai amélioré en me référant au lien fourni dans le commentaire. Il est raccourci à 3 lignes et peut gérer une liste infinie. Fractionner l'itérateur en morceaux avec python
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))
"""
production:
(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)])
#production:[('h', 'o', 'g'), ('e', 'h', 'o'), ('g', 'e', 'h'), ('o', 'g', 'e')]
#itertools.Peut être défait avec une chaîne
print(tuple(itertools.chain.from_iterable(splitparN(range(12)))))
#production:(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
Recommended Posts