Сделайте генератор, который читает не больше size элементов исходного iterable через itertools.islice. Последняя пачка может быть короче; размер должен быть положительным целым.
Возвращает итератор, который пачками размера `size` отдает элементы.
Сделайте генератор, который читает не больше size элементов исходного iterable через itertools.islice. Последняя пачка может быть короче; размер должен быть положительным целым.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Сделайте генератор, который читает не больше size элементов исходного iterable через itertools.islice. Последняя пачка может быть короче; размер должен быть положительным целым.
from itertools import islice
def batches(iterable, size):
if not isinstance(size, int) or isinstance(size, bool) or size <= 0:
raise ValueError("size must be a positive integer")
iterator = iter(iterable)
while True:
batch = list(islice(iterator, size))
if not batch:
return
yield batch
Функция работает и с одноразовым итератором, не загружая его целиком. На каждый элемент приходится одно чтение: O(n) общего времени и O(size) памяти для текущей пачки, если потребитель не накапливает все результаты. Валидация генераторной функции выполняется при начале итерации.