Если вы не возражаете против использования внешнего пакета, вы можете использовать iteration_utilities.grouper
из iteration_utilties
1 . Поддерживаются все итерации (не только последовательности):
from iteration_utilities import grouper
seq = list(range(20))
for group in grouper(seq, 4):
print(group)
который печатает:
(0, 1, 2, 3)
(4, 5, 6, 7)
(8, 9, 10, 11)
(12, 13, 14, 15)
(16, 17, 18, 19)
Если длина не кратна размеру группы, он также поддерживает заполнение (неполная последняя группа) или усечение (исключение неполной последней группы) последней:
from iteration_utilities import grouper
seq = list(range(17))
for group in grouper(seq, 4):
print(group)
# (0, 1, 2, 3)
# (4, 5, 6, 7)
# (8, 9, 10, 11)
# (12, 13, 14, 15)
# (16,)
for group in grouper(seq, 4, fillvalue=None):
print(group)
# (0, 1, 2, 3)
# (4, 5, 6, 7)
# (8, 9, 10, 11)
# (12, 13, 14, 15)
# (16, None, None, None)
for group in grouper(seq, 4, truncate=True):
print(group)
# (0, 1, 2, 3)
# (4, 5, 6, 7)
# (8, 9, 10, 11)
# (12, 13, 14, 15)
1 Отказ от ответственности: я являюсь автором этого пакета.