repeat
создает итеративный объект, поэтому вам нужно объединить эти итераторы в цепочку, а перед созданием списка выполнить итерацию по результату. (Вам также нужно поменять аргументы на zip
)
>>> from itertools import starmap, repeat, chain
>>> list(<b>chain.from_iterable(</b>starmap(repeat, zip(nums[<b>1</b>::2], nums[::2]))<b>)</b>)
[2, 4, 4, 4]
На самом деле вам не нужны ни starmap
, ни zip
; map
может применить многопараметрическую функцию к нескольким итераторам, принимая по одному аргументу от каждого итератора за вызов.
>>> list(chain.from_iterable(map(repeat, nums[1::2], nums[::2])))
[2, 4, 4, 4]
Продвигаясь на один шаг дальше в itertools
land, вы можете использовать tee
и islice
чтобы избежать создания двух временных списков с помощью нарезки nums
(хотя при этом в одной строке возникает беспорядок):
>>> from itertools import tee, islice
>>> t1, t2 = tee(nums)
>>> list(chain.from_iterable(map(repeat, <b>islice(t1, 1, None, 2)</b>, <b>islice(t2, None, None, 2)</b>)))
[2, 4, 4, 4]