指定した位置まで配列を反転するPythonプログラムの書き方
ユーザーから入力された配列と、反転したい位置が与えられたとき、その位置までの部分配列を逆順に並べ替えるのが本記事の目的です。具体的には、配列の先頭から n 番目までの要素(インデックス 0 ~ n-1)を反転し、残りの要素は元の順序のまま後ろに連結します。
実行例
入力:A=[3, 7, 6, 4, 1, 2] n=4 出力:[1, 4, 6, 7, 3, 2]
この例では、先頭から 4 番目までの要素 [3, 7, 6, 4] が [4, 6, 7, 3] と反転され、残りの [1, 2] がそのまま後ろに続いています。
アルゴリズム
ステップ1:先頭から n-1 番目までの要素を逆順に並べ替える ステップ2:n 番目以降の残りの部分を切り出す ステップ3:両方の部分を連結して出力する
サンプルコード
# 配列を指定位置まで反転するプログラム
def arrayreverse(A, n):
# インデックス n-1 から先頭に向かって逆順にしたリストを生成し、
# n 番目以降の要素と連結して表示する
print("REVERSE OF AN ARRAY UPTO", n, "POSITION", A[n-1::-1] + A[n:])
# ドライバープログラム
if __name__ == "__main__":
A = list()
n1 = int(input("リストのサイズを入力してください ::"))
print("リストの要素を入力してください ::")
for i in range(n1):
k = int(input(""))
A.append(k)
n = int(input("反転する位置を入力してください ::"))
arrayreverse(A, n)ポイントはスライス記法です。A[n-1::-1] はインデックス n-1 の要素から先頭に向かって逆順に要素を取り出す操作、A[n:] はインデックス n 以降の要素をそのまま切り出す操作を表します。この2つを + 演算子で連結することで、指定位置までだけを反転した新しいリストが簡単に作成できます。
実行結果
リストのサイズを入力してください ::6 リストの要素を入力してください :: 2 3 4 1 78 23 反転する位置を入力してください ::5 REVERSE OF AN ARRAY UPTO 5 POSITION [78, 1, 4, 3, 2, 23]
このようにPythonのスライスを活用すれば、ループ処理を明示的に書くことなく、簡潔かつ可読性の高いコードで部分反転を実現できます。ぜひ自分の環境でも動かしてみてください。
-
Pythonで配列の反転数(転倒数)をカウントする方法
はじめに この記事では、配列内の反転(インバージョン)をカウントする問題とその解決策について詳しく解説します。 問題定義 問題: リストが与えられたとき、その中に含まれる反転の数をカウントして表示します。 反転数とは、配列を昇順にソートされた状態にするために必要な入れ替え(スワップ)の回数を表す指標です。具体的には、i < j かつ arr[i] > arr[j] を満たす要素のペア(i, j)の総数として定義されます。 実装例 # 反転数をカウントする関数 def InvCount(arr, n): inv_count = 0 for i in range(n
-
Pythonでアナグラム部分文字列検索プログラムを作成する方法
はじめに この記事では、以下の問題文に対する解決策について学びます。 問題文 − テキストとパターンが与えられたとき、テキスト内に含まれるパターンおよびその順列(アナグラム)の出現位置をすべて出力します。 例えば、テキストが「TUTORIALSPOINT」、パターンが「TOR」であれば、「ROT」や「OTR」といった並べ替えも検索対象となります。 アルゴリズムの考え方 この問題は、スライディングウィンドウ(滑動窓)と文字カウント配列を組み合わせることで効率的に解くことができます。手順は以下のとおりです。 パターン内の各文字の出現回数を、カウント配列 countP に記録します。 テキストの先