Функция, которая создает генератор потока для данного итерируемого объекта
Есть функция; она создает генератор потока для данного итерируемого объекта, его элементы содержат позицию и значение и отсортированы по порядку появления. Генератор потока должен быть равен исходному потоку (без позиции), но пробелы заполнены нулями:
gen = gen_stream (9, [(4,111), (7,12)])
list (gen) [0, 0, 0, 0, 111, 0, 0, 12, 0] # первый элемент имеет нулевой индекс, поэтому 111 находится на пятой позиции, 12 - на 8-й позиции, т.е. 2 значащих элемента имеют индексы 4 и 7, все остальные элементы заполнены нулями
from itertools import count
def gen_stream(total, sorted_iterable, extractor=lambda x: x):
sorted_iterable = dict(map(extractor, sorted_iterable))
iterable = count() if total is None else range(total)
for i in iterable:
yield sorted_iterable.get(i, 0)
#gen = gen_stream(9,[(4,111),(7,12)])
#list(gen)
Вот что выводит:
[0, 0, 0, 0, 111, 0, 0, 12, 0]
Теперь вопрос: Как сделать задачу, не преобразуя iterable в dictionary, как я понял, это тут
sorted_iterable = dict(map(extractor, sorted_iterable))