まず、最も基本的な方法として、以下のようなアルゴリズムを考えます。
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回転させる方法のいくつかです。どの方法を選ぶかは、使用する場面や配列のサイズによって異なる場合があります。効率性やコードのシンプルさを考慮して、適切な方法を選んでください。