Code qui divise un itérateur en morceaux d'itérateurs en python. J'ai trouvé du code sur le net pour diviser la liste en morceaux, mais je n'ai pas trouvé le code pour diviser l'itérateur en morceaux, alors je l'ai écrit.
Si vous souhaitez diviser une liste en morceaux depuis le début, vous pouvez utiliser un index et il est facile de diviser les itérateurs tout en les répertoriant. Cependant, afin de diviser l'itérateur tel quel, le sous-itérateur devait notifier l'itérateur de base de StopIteration, ce qui rendait cette méthode difficile. Après tout, j'utilise une méthode un peu désagréable.
Ce qui est désagréable, c'est que j'utilise la liste épuisée = [False] pour passer des valeurs hors du sous-titre. Si vous l'avez normalement comme valeur booléenne, vous ne pouvez pas écrire de l'intérieur vers l'extérieur, nous utilisons donc une liste qui est un objet variable. La classe est utilisée dans une situation similaire à l'implémentation de référence de itertools.groupby dans la documentation officielle de Python. Il peut donc s'agir d'une implémentation de type python.
La caractéristique est qu'il devient trop énorme lorsqu'il est répertorié, et il peut être facilement utilisé même dans les cas qui affectent les performances.
def chunk(it, n):
it = iter(it)
exhausted = [False]
def subiter(it, n, exhausted):
for i in range(n):
try:
yield next(it)
except StopIteration:
exhausted[0] = True
while not exhausted[0]:
yield subiter(it, n, exhausted)
Recommended Posts