ひまlab

ひまな時になんか書く。

Pythonで循環リストっぽいものをやってみる

はじめに

しばらく放置していたので、小ネタを書いてみます。

ちょっとした状態管理を書くときなどに、循環リストが使いたくなる時があります。

起動 → 実行中 → 停止 → 起動みたいに繰り返される状態を表したいなど

使う機会があり、ちょっと書いてみたので公開します。
リストと言いつつ、ジェネレータを使って実装しているため、追加などができませんので悪しからず。

やってみる

def circular_list(list):
    # listの長さは1以上
    index = 0
    while True:
        yield list[index]
        index = (index + 1) % len(list)

使ってみる

試しのテストを書いてみます。

import unittest
class Test(unittest.TestCase):
    def test_circular_list(self):
        list = circular_list(['foo', 'bar', 'baz'])
        self.assertEquals(list.__next__(), 'foo')
        self.assertEquals(list.__next__(), 'bar')
        self.assertEquals(list.__next__(), 'baz')
        self.assertEquals(list.__next__(), 'foo')
        self.assertEquals(list.__next__(), 'bar')
        self.assertEquals(list.__next__(), 'baz')

if __name__ == '__main__':
    unittest.main()