Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Python入門】配列を指定位置まで反転させる2つの方法を解説

はじめに

このチュートリアルでは、Pythonで配列の先頭から指定された位置までの要素を反転させる方法を解説します。まずは、どのような処理を行うのか具体的に確認しておきましょう。

問題の定義

整数の配列と数値 n が与えられたとき、0番目のインデックスから (n-1)番目のインデックスまでの要素を反転させることが目的です。例えば、次のようになります。

入力
array = [1, 2, 3, 4, 5, 6, 7, 8, 9]、n = 5

出力
[5, 4, 3, 2, 1, 6, 7, 8, 9]

この処理を実現するための基本的な手順は以下の通りです。

  • 配列と数値 n を初期化する
  • n ÷ 2 回だけループ処理を行う
    • i 番目の要素と (n-i-1) 番目の要素を入れ替える
  • 配列を出力して結果を確認する

方法1:要素の入れ替え(スワップ)による反転

まずは、ループを使って要素を直接入れ替える基本的な方法から見ていきましょう。

サンプルコード

## 配列と数値を初期化
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
n = 5

## nが配列の長さ以内であるかをチェック
if n > len(arr):
    print(f"{n} は不正な値です")
else:
    ## n // 2 回だけループ
    for i in range(n // 2):
        arr[i], arr[n - i - 1] = arr[n - i - 1], arr[i]
    ## 配列を出力
    print(arr)

上記のプログラムを実行すると、次の結果が得られます。

出力結果

[5, 4, 3, 2, 1, 6, 7, 8, 9]

このコードでは、配列の両端から中央に向かってペアとなる要素を順に入れ替えることで、指定位置までの範囲を反転させています。また、n が配列の長さを超えている場合には不正な値として弾くバリデーションも加えている点に注目してください。

方法2:スライスを使ったシンプルな書き方

Pythonではスライスを活用することで、同じ処理をより簡潔に実装できます。

  • 配列と数値 n を初期化する
  • (n-1) から 0 までの部分と、n から末尾までの部分をそれぞれスライスして連結する

それでは実際のコードを見てみましょう。

サンプルコード

## 配列と数値を初期化
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
n = 5

## nが配列の長さ以内であるかをチェック
if n > len(arr):
    print(f"{n} は不正な値です")
else:
    ## 先頭からn番目までを反転
    ## [n-1::-1] ... インデックスを1ずつ減らしながら反転
    ## [n:] ... nから末尾までをそのまま取得
    arr = arr[n-1::-1] + arr[n:]
    ## 配列を出力
    print(arr)

このプログラムを実行しても、同じ結果が得られます。

出力結果

[5, 4, 3, 2, 1, 6, 7, 8, 9]

スライス [n-1::-1] は「インデックス n-1 から始めて、ステップ -1 で先頭まで遡る」という意味です。これにより先頭から n 要素分が反転され、[n:] で取り出した残りの部分と連結することで目的の配列が完成します。

まとめ

今回は、Pythonで配列の先頭から指定位置 n までの要素を反転させる2つの方法を紹介しました。ループによる要素の入れ替えはアルゴリズムの仕組みを理解するのに役立ち、一方でスライスを使った方法はPythonらしい簡潔な記述が魅力です。用途や可読性の観点から、両者を使い分けてみてください。

プログラムについてご不明な点がありましたら、コメント欄でお気軽にお尋ねください。

  1. Pythonで配列の反転数(転倒数)をカウントする方法

    はじめに この記事では、配列内の反転(インバージョン)をカウントする問題とその解決策について詳しく解説します。 問題定義 問題: リストが与えられたとき、その中に含まれる反転の数をカウントして表示します。 反転数とは、配列を昇順にソートされた状態にするために必要な入れ替え(スワップ)の回数を表す指標です。具体的には、i < j かつ arr[i] > arr[j] を満たす要素のペア(i, j)の総数として定義されます。 実装例 # 反転数をカウントする関数 def InvCount(arr, n): inv_count = 0 for i in range(n

  2. Pythonでアナグラム部分文字列検索プログラムを作成する方法

    はじめに この記事では、以下の問題文に対する解決策について学びます。 問題文 − テキストとパターンが与えられたとき、テキスト内に含まれるパターンおよびその順列(アナグラム)の出現位置をすべて出力します。 例えば、テキストが「TUTORIALSPOINT」、パターンが「TOR」であれば、「ROT」や「OTR」といった並べ替えも検索対象となります。 アルゴリズムの考え方 この問題は、スライディングウィンドウ(滑動窓)と文字カウント配列を組み合わせることで効率的に解くことができます。手順は以下のとおりです。 パターン内の各文字の出現回数を、カウント配列 countP に記録します。 テキストの先