Source code for redditwarp.iterators.chunking
from __future__ import annotations
from typing import TypeVar, Iterable, Iterator, Sequence
from itertools import islice
T = TypeVar('T')
[docs]def chunked(src: Iterable[T], size: int) -> Iterator[Sequence[T]]:
itr = iter(src)
while chunk := tuple(islice(itr, size)):
yield chunk
[docs]class ChunkingIterator(Iterator[Sequence[T]]):
"""Chunking iterator.
The chunk size can be controlled during iteration using `.size`.
"""
def __init__(self, src: Iterable[T], size: int) -> None:
self._itr = iter(src)
self.size: int = size
("")
def __iter__(self) -> Iterator[Sequence[T]]:
return self
def __next__(self) -> Sequence[T]:
if chunk := tuple(islice(self._itr, self.size)):
return chunk
raise StopIteration