✅ Решения

⚡ Кратко

Генераторы используют yield, сохраняют состояние и одноразовые. Для уникальных элементов используйте множество внутри генератора.

Решение 1. Фильтр чисел

def multiples_of_five(numbers):
    for num in numbers:
        if num % 5 == 0:
            yield num

numbers = [12, 15, 33, 40, 55, 62, 75, 83, 90]
for value in multiples_of_five(numbers):
    print(value)

Решение 2. Квадраты чисел

def squares_up_to(n):
    for i in range(1, n + 1):
        yield i ** 2

for value in squares_up_to(10):
    print(value)

Решение 3. Фибоначчи

def fibonacci():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b

fib = fibonacci()
for _ in range(10):
    print(next(fib))

Решение 4. Уникальные элементы

def unique_elements(data):
    seen = set()
    for item in data:
        if item not in seen:
            seen.add(item)
            yield item

data = [3, 1, 2, 3, 4, 1, 5, 2, 6, 7, 5, 8]
for value in unique_elements(data):
    print(value)

Решение 5. flatten с yield from

def flatten(data):
    for item in data:
        if isinstance(item, list):
            yield from flatten(item)
        else:
            yield item

print(list(flatten([1, [2, [3, 4]], 5])))