Python 3.12+itertoolsфункция
itertools.batched
itertools
Разбивает итерируемое на кортежи длины n (последний может быть короче); Python 3.12+.
Синтаксис
itertools.batched(iterable, n)
Возвращает ленивый итератор кортежей, а не список, — оборачивайте в list(), если нужен весь результат сразу. До 3.12 для нарезки писали zip(*[iter(it)]*n), но тот молча выбрасывал неполный последний кусок, а batched его сохраняет; с 3.13 есть strict=True, чтобы потребовать одинаковую длину всех кусков (иначе ValueError), а n меньше 1 всегда ошибка.
Примеры
import itertools
print(list(itertools.batched([1, 2, 3, 4, 5], 2))) # → [(1, 2), (3, 4), (5,)]
print(list(itertools.batched('abcdef', 3))) # → [('a', 'b', 'c'), ('d', 'e', 'f')]
print([sum(b) for b in itertools.batched(range(1, 7), 3)]) # → [6, 15]
print(list(itertools.batched([], 3))) # → []
print(list(itertools.batched([1, 2, 3], 0))) # → ValueError
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности