Генератор 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")