よくよく考えてみると、これが一番いい方法だと思います。を使わなくても簡単に途中抜けできるのbreak
が重要だと思いますし、計算量も少ないので最速だと思います。li
また、リストまたはタプルである必要もありません。任意のイテレータである可能性があります。
from itertools import cycle
li = [0, 1, 2, 3]
running = True
licycle = cycle(li)
# Prime the pump
nextelem = next(licycle)
while running:
thiselem, nextelem = nextelem, next(licycle)
後世のために、他のソリューションをここに残します。
派手なイテレータのすべてには適切な場所がありますが、ここにはありません。% 演算子を使用します。
li = [0, 1, 2, 3]
running = True
while running:
for idx, elem in enumerate(li):
thiselem = elem
nextelem = li[(idx + 1) % len(li)]
リストを無限に循環させたい場合は、次のようにします。
li = [0, 1, 2, 3]
running = True
idx = 0
while running:
thiselem = li[idx]
idx = (idx + 1) % len(li)
nextelem = li[idx]
tee
を含む他のソリューションよりも理解しやすく、おそらく高速だと思います。リストのサイズが変わらないことが確実な場合は、リストのコピーを取り出してlen(li)
使用できます。
これにより、バケツが再び底に下がるのを待つ必要がなく、途中で観覧車から簡単に降りることができます。他のソリューション(あなたのものを含む)では、ループrunning
の途中でチェックインしてから.for
break