Python で配列をシフトまたは回転する

Muhammad Waiz Khan 2023年1月30日
  1. Python で collections モジュールを使用しての配列をシフトする
  2. Python で numpy.roll() メソッドを使用して配列をシフトする
  3. Python で配列スライシングを使用して配列をシフトする
Python で配列をシフトまたは回転する

この記事では、Python で配列を左または右方向にシフトまたは回転する方法について説明します。配列を回転させるということは、配列の各値を n の位置だけ左側または右側に移動またはシフトすることを意味します。そして、右端または左端の要素が配列のもう一方の端に移動します。

以下で説明するさまざまな方法を使用して、Python で配列をシフトまたは回転できます。

Python で collections モジュールを使用しての配列をシフトする

collections モジュールの deque.rotate(n) メソッドを使用して、Python で配列を回転させることができます。deque.rotate(n) メソッドは、deque クラスオブジェクト n の位置を回転します。n の記号は、deque を左方向に回転するか右方向に回転するかを示します。

n の値が正の場合、入力は左から右方向に回転し、n の値が負の場合、入力は右から左方向に回転します。以下のコードは、Python で deque.rotate(n) メソッドを使用して配列を回転させる方法を示しています。

from collections import deque

myarray = deque([1, 2, 3, 4, 5, 6])
myarray.rotate(2)  # rotate right
print(list(myarray))
myarray.rotate(-3)  # rotate left
print(list(myarray))

出力:

[5, 6, 1, 2, 3, 4]
[2, 3, 4, 5, 6, 1]

Python で numpy.roll() メソッドを使用して配列をシフトする

numpy.roll(array, shift, axis) メソッドは、入力として array を受け取り、shift 値に等しい位置に回転します。配列が 2 次元配列の場合、回転を適用する必要がある軸を指定する必要があります。それ以外の場合、numpy.roll() メソッドは両方の軸に回転を適用します。

deque.rotate() メソッドと同様に、numpy.roll() も、値が正の場合は配列を右から左に回転し、値が負の場合は右から左に回転します。以下のサンプルコードは、numpy.roll() メソッドを使用して Python で配列を回転させる方法を示しています。

import numpy as np

myarray = np.array([1, 2, 3, 4, 5, 6])
newarray = np.roll(myarray, 2)  # rotate right
print(newarray)
newarray = np.roll(myarray, -2)  # rotate left
print(newarray)

出力:

[5 6 1 2 3 4]
[3 4 5 6 1 2]

Python で配列スライシングを使用して配列をシフトする

Python で配列スライシングを使用して rotate 関数を実装することもできます。このメソッドは追加のライブラリを必要としませんが、上記で説明したメソッドよりも効率が低くなります。

以下のサンプルコードは、配列スライシングを使用して Python で配列を回転またはシフトする方法を示しています。

def rotate(input, n):
    return input[n:] + input[:n]


myarray = [1, 3, 5, 7, 9]
print(rotate(myarray, 2))  # rotate left
print(rotate(myarray, -2))  # rotate right

出力:

[5, 7, 9, 1, 3]
[7, 9, 1, 3, 5]

関連記事 - Python Array