Возврат списка с копиями элементов
Подскажите, пожалуйста, как мне получить с помощью yield список, который должен содержать n копий этого элемента. Моя функция:
def replicate(value, lst):
for i in lst:
yield [i] * value
print(list(replicate(3, [1, "z"]))) # ==> [[1, 1, 1], ['z', 'z', 'z']]
Пример правильного вывода:
list(replicate(1, [1, 'z'])) # [1, 'z']
list(replicate(0, [1, 'z'])) # []
list(replicate(5, [1, 'z'])) # [1, 1, 1, 1, 1, 'z', 'z', 'z', 'z', 'z']
Если использую yield i * valueто получаю [3, 'zzz']. Может быть требуется выпрямление списка
Ответы (2 шт):
Автор решения: splash58
→ Ссылка
Всего лишь вынести количество в еще один цикл
def replicate(value, lst):
for i in lst:
for _ in range(value):
yield i
Автор решения: SergFSM
→ Ссылка
есть такая конструкция:
def replicate(value, lst):
for i in lst:
yield from [i] * value
>>> list(replicate(5, [1, 'z'])) # [1, 1, 1, 1, 1, 'z', 'z', 'z', 'z', 'z']