pythonで環状リストってどうやるんだろ・・・と思っていたら、ぱっとこんな記事が見つかった。神かよ。
はじめに しばらく放置していたので、小ネタを書いてみます。 ちょっとした状態管理を書くときなどに、循環リストが使いたくなる時があります。 起動 → 実行中 → 停止 → 起動みたいに繰り返される状態を表したいなど 使う機会があり、ちょっと書いてみたので公開します。 リストと言いつつ、ジェネレータを使って実装しているため、追加などができませんので悪しからず。 やってみる def circular_list(list): # listの長さは1以上 index = 0 while True: yield list index = (index + 1) % len(list) 使って… Pythonで循環リストっぽいものをやってみる - ひまlab - ひまlab |
って事で、これを参考に作ってみた。
色々機能を追加してたら環状かつ双方向のリストになった。
初期位置にリセットする機能もついてる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
class cycle: def __init__(self, list): self.i = 0 self.list = list def next(self): self.i = (self.i + 1) % len(self.list) return self.list[self.i] def previous(self): self.i = (self.i - 1 + len(self.list)) % len(self.list) return self.list[self.i] def present(self): return self.list[self.i] def reset(self): self.i = 0 return |
試しに使ってみた結果は以下の通り。
イイ感じに動いた。