Pythonで配列を1回転させる方法 - コード例と解説


まず、最も基本的な方法として、以下のようなアルゴリズムを考えます。

def rotate_array(arr):
    last_element = arr[-1]
    for i in range(len(arr)-1, 0, -1):
        arr[i] = arr[i-1]
    arr[0] = last_element
    return arr

この関数は、与えられた配列 arr を引数として受け取り、配列の要素を1回転させた結果を返します。具体的には、最後の要素を一時的に保存し、配列の最後の要素から順番に前の要素の値を代入していきます。最後に、一時的に保存していた最後の要素を配列の先頭に代入します。

このアルゴリズムの時間計算量はO(n)であり、配列の長さに比例して処理時間が増加します。

次に、Pythonのスライスを利用して簡潔に配列を1回転させる方法を紹介します。

def rotate_array(arr):
    return arr[-1:] + arr[:-1]

この関数では、スライスを使って配列の最後の要素を取得し、それを先頭に、配列の最初から最後-1までの要素を取得して結合しています。この方法は、一行でコンパクトに書ける上に、Pythonのスライスの効率的な実装が活かされるため、処理速度も比較的高速です。

さらに、collections.deque を利用して配列を1回転させる方法もあります。

from collections import deque
def rotate_array(arr):
    arr_deque = deque(arr)
    arr_deque.rotate(1)
    return list(arr_deque)

この関数では、collections.deque を使って配列をデック(双方向キュー)として扱います。デックのメソッドであるrotateを使うことで、指定した回数分だけ要素を回転させることができます。ここでは回転数を1としているため、配列が一つ右に回転します。最後に、デックをリストに変換して結果を返します。

以上がPythonで配列を1回転させる方法のいくつかです。どの方法を選ぶかは、使用する場面や配列のサイズによって異なる場合があります。効率性やコードのシンプルさを考慮して、適切な方法を選んでください。