Pythonの剰余演算(モジュロ)を利用して数値をローテーションさせる

剰余演算(モジュロ)は真偽判定や偶奇性にしばしば使われるが、その他にも数値のローテーションに利用できる。

list = []
for i in range(10):
    num = i % 4
    list.append(num)
print(list)
#[0, 1, 2, 3, 0, 1, 2, 3, 0, 1]

print([i % 4 for i in range(10)])
#[0, 1, 2, 3, 0, 1, 2, 3, 0, 1]

print([(i + 1) % 4 for i in range(10)])
#[1, 2, 3, 0, 1, 2, 3, 0, 1, 2]

print([i % 4 + 1 for i in range(10)])
#[1, 2, 3, 4, 1, 2, 3, 4, 1, 2]

print([i % 4 for i in range(-5, 5)])
#[3, 0, 1, 2, 3, 0, 1, 2, 3, 0]

所定の数になったらカウンタを0に戻して……といった処理を省けるのですっきり書ける。

被除数が負数の場合

被除数が負数の剰余演算は必ずしも他言語と解が同じになるとは限らない。例えば-1%4に対してPythonは3を返すが、C/C++やC#では-1になる(Pythonでもmathモジュールのfmod()関数で計算すれば-1を得ることができる)。