[Python] 配列を逆順にする

与えられた配列を逆順にする In-place アルゴリズムを Python で書いてみます。

通常は list.reverse() list[::-1] を使います。

考え方は簡単で、左右両端にインデックスを置いて入れ替え、その後一つ狭めてさらに左右両端を入れ替える…という操作を、お互いのインデックスが出会うまで繰り返すだけです。

in-placeアルゴリズムとは、計算機科学においてデータ構造の変換を行うにあたって、追加の記憶領域をほとんど使わずに行うアルゴリズムを意味する。 in-place とは「その場で」といった意味であり、入力が出力で上書きされることが多いことから来る用語である。

出典: フリー百科事典『ウィキペディア(Wikipedia)』
def reverse_in_place(array):
    low_index = 0
    high_index = len(array) - 1

    while high_index > low_index:
        array[low_index], array[high_index] = array[high_index], array[low_index]
        low_index += 1
        high_index -= 1

    return array


if __name__ == '__main__':
    array = list(range(10))
    # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    print(array)
    # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
    print(reverse_in_place(array))