Pythonで1回の走査だけでスペースを文字列の先頭へ移動するプログラム
はじめに
単語とスペースが混在した文字列が与えられたとき、文字列を一度だけ走査して、すべてのスペースを文字列の先頭に移動させるのが本記事の目的です。
Pythonではリスト内包表記(List Comprehension)を使うことで、この問題をシンプルかつ効率的に解くことができます。
実行例
入力:string = "python program" 出力:string = " pythonprogram"
アルゴリズム
- 単語とスペースを含む文字列を入力として受け取ります。
- 入力文字列を走査し、リスト内包表記を使ってスペースを除いた文字列を作成します。
- 元の文字列の長さと、スペース除去後のリストの長さの差からスペースの個数を計算します。
- スペースの個数分の空白からなる先頭部分の文字列を作成します。
- 先頭のスペース群と、スペースを除去した文字列を連結して最終結果を作ります。
- 結果の文字列を出力します。
サンプルコード
# 文字列を1回だけ走査して
# スペースを先頭に移動する関数
def frontstringmove(str):
# スペース以外の文字だけを抽出(1回の走査で完了)
noSp = [i for i in str if i != ' ']
# スペースの個数を算出
space = len(str) - len(noSp)
# 先頭に付けるスペース列を作成
result = ' ' * space
# スペース列 + スペースなし文字列を連結
result = '"' + result + ''.join(noSp) + '"'
print("Final Result ::>", result)
# ドライバープログラム
if __name__ == "__main__":
str = input("Enter String")
frontstringmove(str)実行結果
Enter String: python program Final Result ::> " pythonprogram"
処理のポイント
- リスト内包表記により、文字列の走査はわずか1回で済みます。条件式
i != ' 'でスペースを除外しながら文字を収集します。 - スペース数の計算は、全体の長さから非スペース文字数を引くだけで求められるため、追加の走査は不要です。
- 文字列連結には
''.join()を使用しています。+演算子で繰り返し連結するよりも効率的で、パフォーマンス面でも有利です。
まとめ
この方法を使えば、時間計算量 O(n)・走査回数 1回 という制約を満たしながら、スペースをすべて文字列の先頭に移動できます。リスト内包表記と join() を組み合わせることで、コードも簡潔になり、Pythonらしい美しい実装となります。
-
Pythonで16進数の文字列を10進数に変換する方法を解説
この記事では、16進数の文字列を10進数に変換する問題の解決策について詳しく解説します。課題の概要16進数形式の文字列が与えられたとき、それを対応する10進数の値に変換することを目標とします。例えば、16進数の「F」は10進数では「15」に相当します。この問題には主に2つのアプローチがあります。力ずく(ブルートフォース)な手法:int関数を使った明示的な型変換組み込みモジュールを活用する手法:astモジュールのliteral_eval関数を使用方法1:int関数を使った変換最もシンプルで一般的な方法は、Pythonの組み込み関数であるint()を利用するものです。この関数は2つの引数を受け取り
-
Pythonで文字列内のミラー文字を検索する方法【初心者向け解説】
ユーザーが入力した文字列と位置(ポジション)が与えられたとき、その位置から文字列の末尾までの文字を、アルファベット順を反転させた「ミラー文字」に変換するプログラムを作成します。この操作では、「a」→「z」、「b」→「y」、「c」→「x」、「d」→「w」のように、アルファベットの最初の文字が最後の文字に対応する形で置き換えを行います。 入力: p = 3 入力文字列 = python 出力: pygslm 上記の例では、3番目の位置以降の文字「t」「h」「o」「n」が、それぞれ逆順のアルファベット「g」「s」「l」「m」に変換されていることがわかります。先頭から指定位置までは元の文字列