Создать функцию-генератор из списка с изменяющимся инкрементом
Подвох в том, что шаг должен быть 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