itertools.batched: нарезать последовательность кусками фиксированной длины
Нужно разбить список на пачки по N элементов: батчи API, строки таблицы, чанки для обработки. Ручной цикл с шагом N и срезами легко ошибается на «хвосте». С Python 3.12 есть готовый способ — batched из itertools.
Он берёт iterable и размер n, отдаёт кортежи длины n. Последний кусок может быть короче, если элементов не хватило — без IndexError.
from itertools import batched
print(list(batched(range(1, 11), 3)))
# [(1, 2, 3), (4, 5, 6), (7, 8, 9), (10,)]
print(list(batched("abcdefg", 2)))
# [('a', 'b'), ('c', 'd'), ('e', 'f'), ('g',)]
Важно: n должен быть не меньше 1, иначе ValueError. Это итератор — если пачки нужны дважды, оберни в list.
Когда брать: непересекающиеся окна фиксированной длины. Когда не брать: нужны скользящие окна со сдвигом на 1 (соседи) — тогда pairwise или свой sliding window; batched куски не перекрываются.
источник:
#шпаргалка