给定一个迭代器i
,我想要一个迭代器,它产生每个元素n
次,即相当于这个函数
def duplicate(i, n):
for x in i:
for k in range(n):
yield x
这是否有单行?
相关问题:duplicate each member in a list - python,但zip
解决方案无效。
答案 0 :(得分:6)
如果您想同时复制每个元素,这是我的简单解决方案。它返回一个生成器表达式,它应该是内存效率。
def duplicate(i, n):
return (k for k in i for j in range(n))
示例用法可以是,
print (list(duplicate(range(1, 10), 3)))
哪些打印,
[1,1,1,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,8,8, 8,9,9,9]
答案 1 :(得分:3)
itertools.chain.from_iterable(itertools.izip(*itertools.tee(source, n)))
示例:
>>> x = (a**2 for a in xrange(5))
>>> list(itertools.chain.from_iterable(itertools.izip(*itertools.tee(x, 3))))
[0, 0, 0, 1, 1, 1, 4, 4, 4, 9, 9, 9, 16, 16, 16]
另一种方式:
itertools.chain.from_iterable(itertools.repeat(item, n) for item in source)
>>> x = (a**2 for a in xrange(5))
>>> list(itertools.chain.from_iterable(itertools.repeat(item, 3) for item in x))
[0, 0, 0, 1, 1, 1, 4, 4, 4, 9, 9, 9, 16, 16, 16]
答案 2 :(得分:1)
使用生成器表达式:
>>> x = (n for n in range(4))
>>> i = (v for v in x for _ in range(3))
>>> list(i)
[0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3]