,我要能產生各元件n
倍,即,該功能重複每個部件在給定的迭代器<code>i</code>一個迭代
def duplicate(i, n):
for x in i:
for k in range(n):
yield x
相當於一個迭代是否有一個單行此?
相關問題:duplicate each member in a list - python,但zip
解決方案不起作用。
,我要能產生各元件n
倍,即,該功能重複每個部件在給定的迭代器<code>i</code>一個迭代
def duplicate(i, n):
for x in i:
for k in range(n):
yield x
相當於一個迭代是否有一個單行此?
相關問題:duplicate each member in a list - python,但zip
解決方案不起作用。
這是我簡單的解決方案,如果你要複製的每個元素相同的時間。它返回一個生成器表達式,這應該是內存有效的。
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,2,3,3,3,4, 4,4,5,5,6,6,7,7,7,8,8, 8,9,9,9]
「哪個_is_內存效率高」,實際上因爲表達式不需要相同類型的python命名空間,所以_more_memory高效的生成器函數。 –
什麼是發電機功能? – Muctadir
功能與'yield'聲明一樣在OP –
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]
用生成器表達式:
>>> 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]
您的示例產生單個元素n次。它與'[next(i)] * n'相同。 – tdelaney
@tdelaney哎呀:(更正了 –