Можно использовать генераторное выражение:
def greater_than_five(data):
yield from (x for x in data if x > 5)
# Пример использования:
my_list = [1, 6, 2, 7, 8, 3, 9, 4, 5]
result = greater_than_five(my_list)
for num in result:
print(num)
Или более коротко, без функции:
my_list = [1, 6, 2, 7, 8, 3, 9, 4, 5]
result = (x for x in my_list if x > 5)
for num in result:
print(num)
Чтобы вернуть все элементы списка, которые больше 5, с помощью генератора в Python, можно использовать следующий код:
def get_elements_greater_than_5(data):
"""
Генератор, возвращающий элементы списка, которые больше 5.
Args:
data: Список чисел.
Yields:
Числа, большие 5.
"""
for item in data:
if item > 5:
yield item
# Пример использования:
my_list = [1, 6, 2, 8, 3, 9, 4, 10]
# Создаем генератор
generator = get_elements_greater_than_5(my_list)
# Итерируемся по генератору и печатаем результаты
for element in generator:
print(element) # Выведет: 6 8 9 10
# Другой способ получить список из генератора:
greater_than_5_list = list(get_elements_greater_than_5(my_list))
print(greater_than_5_list) # Выведет: [6, 8, 9, 10]
Объяснение:
get_elements_greater_than_5(data)
является генератором. Вместо return
, она использует yield
.yield item
приостанавливает выполнение функции и возвращает текущее значение item
. При следующем запросе значения, выполнение функции возобновляется с того места, где было приостановлено.for item in data
итерируется по входному списку data
.if item > 5
проверяет, больше ли текущий элемент 5. Если да, то он возвращается с помощью yield
.for
и как преобразовать генератор в список с помощью list()
.Альтернативный вариант (с использованием генераторного выражения):
my_list = [1, 6, 2, 8, 3, 9, 4, 10]
# Генераторное выражение
generator = (item for item in my_list if item > 5)
# Итерируемся по генератору и печатаем результаты
for element in generator:
print(element) # Выведет: 6 8 9 10
# Преобразуем генератор в список:
greater_than_5_list = list(generator)
print(greater_than_5_list) # Выведет: [6, 8, 9, 10]
Генераторное выражение – это более компактный способ создания генератора. Оно эквивалентно функции-генератору, определенной выше, но записано в одну строку.