2016-08-31 16 views
0

リストの要素を特定の時間繰り返すイテレータを作成する方法はありますか?例えば、リストが与えられます。以下のリストを生成することができますitertools.repeatlist(color, 7)の形でイテレータを作成する方法はイテレータのpythonリピートリスト要素

color = ['r', 'g', 'b'] 

ありますか?

color_list = ['r', 'g', 'b', 'r', 'g', 'b', 'r'] 
+0

あなたが実際にあなたが質問をする前にitertoolsのドキュメントを読んでみてくださいましたか? –

+1

@PadraicCunningham:もう1つの質問は*フルサイクルリピート*です。ここのOPは3の倍数で満足する必要があります。 –

+1

@MartijnPieters、http://stackoverflow.com/a/10325689/2141635、これはあなた自身の答えとほとんど同じです。 –

答えて

9

あなたのrepeatlist()機能を構築するためにitertools.islice()と一緒itertools.cycle()を使用することができます。

from itertools import cycle, islice 

def repeatlist(it, count): 
    return islice(cycle(it), count) 

これは、新しいイテレータを返します。リストオブジェクトが必要な場合は、list()を呼び出してください。

デモ:

>>> from itertools import cycle, islice 
>>> def repeatlist(it, count): 
...  return islice(cycle(it), count) 
... 
>>> color = ['r', 'g', 'b'] 
>>> list(repeatlist(color, 7)) 
['r', 'g', 'b', 'r', 'g', 'b', 'r'] 
+0

まさに私が欲しいもの!ありがとう! – zhaodaolimeng

-1

試してみてください。

def repeat_list(l, n): 
    for i in range(n): yield l[i%len(l)] 
+0

これはイテレータを返しません。質問から:*特定の時間にリスト内の要素を繰り返すためのイテレータ**を作成する方法はありますか?*。 –

+0

また、質問にはイタレータが必要であることを意味するタグitertoolsがあります。 –

関連する問題