Создать функцию-генератор из списка с изменяющимся инкрементом

Подвох в том, что шаг должен быть 2 вариантов, которые должны чередоваться. Например:

a=[1,2,3,4,5,6,7,8,9]

step=1 or 2

generator(a,step)

вывод: [1,2,4,5,7,8]

Важно также прописать условия, чтобы не выходить за границы списка. Я попробовал следущий код:

def generate_step(a, step):
    a = iter(a)
    step= 1 or 2
    it=iter(range(step))
    while True:
        for x in it:
            for dummy in range(step):
                try:
                    x = next(a)
                except StopIteration:
                    return
            yield x

a = [1, 2, 3, 4, 5, 6, 7]
b = generate_step(a, 2)
print(next(b))

Выводит только одно число, а не список


Ответы (1 шт):

Автор решения: Serg Bocharov

У вас какой-то сумбур в коде (такое впечатление, что вы пытались собрать что-то одно из нескольких разных примеров). Все намного проще. Вот сама функция-генератор:

UPDATE изменил на 2 чередующихся шага

def generate_step(data: list, step1: int, step2: int):
    pos = 0
    step_count = True
    while pos < len(data):
        yield data[pos]
        if step_count:
            pos += step1
            step_count = False
        else:
            pos += step2
            step_count = True

А вот так выводим "ленивые" значения:

a = [1, 2, 3, 4, 5, 6, 7]
b = (generate_step(a, 1, 2))
for value in b:
    print(value)

Вывод:

1
2
4
5
7
→ Ссылка