Генератор Python

Есть список, необходимо вывести этот список по очереди через генератор, еще и с подписями

my_list = (Хлеб, 2, 35, Молоко, 1, 53, Яйцо, 30, 300)
x = (i for i in my_list)
next(x)

Пример
next(x)
output: Название: Хлеб
next(x)
output: Кол-во: 2
next(x)
output: Цена: 35
и т.д.

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

Автор решения: Andy Pavlov

Генератор можно организовать как-то так. Нумеруем список и через остаток вычленяем из списка с подписями подпись к элементу списка.

my_list = ['Хлеб', 2, 35, 'Молоко', 1, 53, 'Яйцо', 30, 300, ]
fields = ['Название', 'Количество', 'Цена', ]

x = (print('{}: {}'.format(fields[ir % len(fields)], item)) for ir, item in enumerate(my_list))

for _ in my_list:  # Выводим в консоль
    next(x)

Или через map и lambda:

x = map(lambda f, m: print(f'{f}: {m}'), fields * (len(my_list) // len(fields)), my_list)

В итоге имеем что-то подобное:

Название: Хлеб
Количество: 2
Цена: 35
Название: Молоко
Количество: 1
Цена: 53
Название: Яйцо
Количество: 30
Цена: 300
→ Ссылка
Автор решения: TigerTV.ru

А если так?

from itertools import cycle

my_list = ['Хлеб', 2, 35, 'Молоко', 1, 53, 'Яйцо', 30, 300, ]
fields = ['Название', 'Количество', 'Цена', ]

def gen(titles, data):
    for i, j in zip(cycle(titles), data):
        yield i + ": " + str(j)

a = gen(fields, my_list)

while True:
    try:
        print(next(a))
    except StopIteration:
        break

Можно в одну строку

print(*(i + ": " + str(j) for i, j in zip(cycle(fields), my_list)), sep="\n")
→ Ссылка