2016-04-15 16 views
0

私は定期的に「サイクル」したいアイテムのリストを持っています。最初のアイテム(0番目)にアクセスし、それをリストの後ろに移動します。これを達成する最良の方法は何ですか?私の希望する構文は以下の通りです。リストアイテムを循環する

items = ["Alex", "Bob", "Charlie", "Doug", "Eddie"] 

display_next_item(items) 
# Alex 

display_next_item(items) 
# Bob 

# ... 

display_next_item(items) 
# Eddie 

display_next_item(items) 
# Alex 
+0

@TessellatingHecklerは私が間違って私の質問と潜在的な答えを分け持っているようです。修正しました - それについて申し訳ありません。 – 2Cubed

答えて

3

あなたはitertools.cycle()を使用することができます。

from itertools import cycle 

L = [10, 20, 30] 
cycled_list = cycle(L) 

は10個のアイテムを取得:

for x in range(10): 
    print(next(cycled_list)) 

出力:

10 
20 
30 
10 
20 
30 
10 
20 
30 
10 

next(cycled_list)で次の項目を取得します。

itertools.cycle()はあなたのリストのコピーを作成します。あなたはイテレータとシーケンスでのみ動作しなく独自のサイクルイテレータ関数を書く ことで、これを避けることができます。

def my_cycle(seq): 
    while seq: 
     for element in seq: 
      yield element 

cycled_list = my_cycle(L) 
for x in range(10): 
    print(next(cycled_list)) 

出力:

10 
20 
30 
10 
20 
30 
10 
20 
30 
10 

をそうでないので、第2の方法は、最もパフォーマンスでなければなりませんリスト012をすべてコピーしてください。

0

あなたは.append().pop()を使用することができます。

items = [1, 2, 3, 4, 5] 
item = items.pop(0) 
items.append(item) 
print(item) # 1 
print(items) # [2, 3, 4, 5, 1]