def numbered(obj, n, default=None):
'''
obj - итератор (или итерируемый объект)
n - число объектов, которое нужно вернуть за раз
default - дефолтное значение для отсутствующих элементов
'''
if not hasattr(obj, '__next__'):
try:
obj = iter(obj) # если не является итератором, оборачиваем через iter
except Exception as exc:
raise ValueError('obj must be an iterator or iterable') from exc
flag = True
while flag:
out = []
for step in range(n):
try:
out.append(next(obj))
except StopIteration:
if out:
more = [default for _ in range(n-step)]
out.extend(more)
yield out
flag = False
break
else:
yield out
ZGVmIG51bWJlcmVkKG9iaiwgbiwgZGVmYXVsdD1Ob25lKToKICAgICcnJwogICAgb2JqIC0g0LjRgtC10YDQsNGC0L7RgCAo0LjQu9C4INC40YLQtdGA0LjRgNGD0LXQvNGL0Lkg0L7QsdGK0LXQutGCKQogICAgbiAtINGH0LjRgdC70L4g0L7QsdGK0LXQutGC0L7Qsiwg0LrQvtGC0L7RgNC+0LUg0L3Rg9C20L3QviDQstC10YDQvdGD0YLRjCDQt9CwINGA0LDQtwogICAgZGVmYXVsdCAtINC00LXRhNC+0LvRgtC90L7QtSDQt9C90LDRh9C10L3QuNC1INC00LvRjyDQvtGC0YHRg9GC0YHRgtCy0YPRjtGJ0LjRhSDRjdC70LXQvNC10L3RgtC+0LIKICAgICcnJwogICAgaWYgbm90IGhhc2F0dHIob2JqLCAnX19uZXh0X18nKToKICAgICAgICB0cnk6CiAgICAgICAgICAgIG9iaiA9IGl0ZXIob2JqKSAgIyDQtdGB0LvQuCDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0LjRgtC10YDQsNGC0L7RgNC+0LwsINC+0LHQvtGA0LDRh9C40LLQsNC10Lwg0YfQtdGA0LXQtyBpdGVyCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ29iaiBtdXN0IGJlIGFuIGl0ZXJhdG9yIG9yIGl0ZXJhYmxlJykgZnJvbSBleGMKICAgIGZsYWcgPSBUcnVlCiAgICB3aGlsZSBmbGFnOgogICAgICAgIG91dCA9IFtdCiAgICAgICAgZm9yIHN0ZXAgaW4gcmFuZ2Uobik6CiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIG91dC5hcHBlbmQobmV4dChvYmopKQogICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKICAgICAgICAgICAgICAgIGlmIG91dDoKICAgICAgICAgICAgICAgICAgICBtb3JlID0gW2RlZmF1bHQgZm9yIF8gaW4gcmFuZ2Uobi1zdGVwKV0KICAgICAgICAgICAgICAgICAgICBvdXQuZXh0ZW5kKG1vcmUpCiAgICAgICAgICAgICAgICAgICAgeWllbGQgb3V0CiAgICAgICAgICAgICAgICBmbGFnID0gRmFsc2UKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgZWxzZToKICAgICAgICAgICAgeWllbGQgb3V0