from itertools import islice from typing import Iterable, Iterator, TypeVar T = TypeVar("T") def chunked(items: Iterable[T], size: int) -> Iterator[list[T]]: if size < 1: raise ValueError("size must be at least 1") it = iter(items) while batch := list(islice(it, size)): yield batch