2016-10-20 20 views
1

後、私は私が作成したクラスに属するオブジェクトのリストを持っている完全なリストの上に行く、最初のループ上のアイテムのXから始まる:ループ反復:

my_list = [item_1, item_2, item_3] 

各項目は属性.attributeを持っています。

while True: 

    for i in range(3): 
     my_function(my_list[i].attribute) 

私の問題:

は、私は私のリストから項目がそうのように、反復処理や属性と一緒に関数を呼び出すために使用されたループを持って、私はどのitemを選択できるようにしたいですmy_listで反復が始まりますが、ループが続行されると、次の反復はmy_listの開始で始まります。言い換えれば、私はこのように行くのforループたい:

item_2 -> item_3 -> item_1 -> item_2 -> item_3 -> item_1 ....

か:

item_1 -> item_2 -> item_3 -> item_1 ...

item_3 -> item_1 -> item_2 -> item_3 -> item_1 ...

の標準の動作とは対照的に

私はそれについてどうやって行かなければならないのか、いくつかの指摘に感謝します。ありがとう。

答えて

2

for i in itertools.islice(itertools.cycle(my_list), start, stop): 
    my_func(i.attribute) 

itertoolsから多分私は質問を誤解していrepeating_list[start:stop]

+0

あなたは_itertools.cycle_を意味しませんでしたか? – volcano

+0

@volcanoはい私は、lol –

+0

ありがとう。このソリューションは、2つの範囲で動作しますか?したがって、 'cycle(my_list')では' cycle(range(3)) 'を使うことができますか? – user2390206

1

をスライストリートstartと、リスト内のインデックスのようなstopcycleisliceを使用していますが、単にmy_functionに最初の呼び出しを入れることができますforループの外側に配置し、内部で通常1回続けます。

my_function(my_list[3].attribute) 
for i in range(3): 
    my_function(my_list[i].attribute) 

はその後、forループの外側と呼ばれる(またはそれが全く呼び出された場合)はitemを決定するための条件を使用することができます。