Генераторы используют 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])))