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

【Python】文字列スライスで部分文字列を繰り返し削除し、文字列が空にできるか判定する方法

はじめに

このチュートリアルでは、指定した部分文字列を再帰的に削除していったとき、元の文字列が最終的に空にできるかどうかを判定するプログラムをPythonで作成します。まずは具体例を見て、動作イメージをつかみましょう。

入力例

string = 'tutorialstutorialspointpoint'
sub_string = 'tutorialspoint'

出力例

True
  • 1回目の処理後:tutorialstutorialspointpoint から tutorialspoint が1つ削除され、tutorialspoint になります。
  • 2回目の処理後:残りの tutorialspoint も削除され、文字列は空になります。

アルゴリズムの考え方

この問題は、文字列クラスが持つ find() メソッドとスライスを組み合わせることで解けます。以下の手順に従ってプログラムを組み立てていきましょう。

  1. stringsub_string を初期化します。
  2. どちらか一方でも空の場合は False を返します。
  3. string の長さが0より大きい間、以下を繰り返します。
    • sub_stringstring 内に存在するかどうかを確認します。
    • 存在しない場合は False を返します。
    • 存在する場合は、スライスを使って該当する部分文字列を取り除きます。
  4. ループが途中で中断されずに完了した(=文字列が空になった)場合は True を返します。

コード例

def is_valid(string, sub_string):
    # 文字列と部分文字列の長さをチェック
    if len(string) > 0 and len(sub_string) > 0:
        # 文字列が空になるまで繰り返す
        while len(string) > 0:
            # 文字列の中から部分文字列を探す
            index = string.find(sub_string)
            # 見つからなかった場合はFalseを返す
            if index == -1:
                return False
            # スライスで部分文字列を削除
            string = string[0:index] + string[index + len(sub_string):]
        # ループを抜けられた=空にできたのでTrueを返す
        return True
    else:
        # どちらかが空ならFalseを返す
        return False


if __name__ == '__main__':
    # 文字列と部分文字列を初期化
    string = 'tutorialstutorialspointpoint'
    sub_string = 'tutorialspoint'
    # メソッドを呼び出して結果を表示
    print(is_valid(string, sub_string))

実行結果

上記のコードを実行すると、次のような結果が得られます。

True

ポイント解説:スライスによる削除処理

このアルゴリズムの核となるのは、次の1行です。

string = string[0:index] + string[index + len(sub_string):]

find() メソッドで取得した位置 index の直前までの部分と、部分文字列の終わり以降の部分を連結することで、sub_string をちょうど1つだけ取り除いた新しい文字列を生成しています。これを文字列が空になるまで繰り返すことで、全体を消去できるかどうかを判定できます。途中で find()-1 を返した時点で、残りの文字列を消去できないことが確定するため、即座に False を返す仕組みになっています。

まとめ

find() メソッドで部分文字列の位置を特定し、スライスによる結合で削除を繰り返すというシンプルなアルゴリズムで、文字列が空にできるかどうかを効率的に判定できました。本チュートリアルについて質問がある場合は、コメント欄でお気軽にお尋ねください。

  1. 文字列が空かどうかをチェックするPythonプログラム

    この記事では、与えられた文字列が空であるかどうかを判定するための解決策とアプローチについて解説します。 問題文 文字列が入力として与えられたとき、その文字列が空(空文字列)であるかどうかを判定する必要があります。 Pythonの文字列はイミュータブル(変更不可)な性質を持っているため、文字列に対して何らかの操作を行う際には注意して扱う必要があります。 ここでは、上記の問題を解決するための2つのアプローチを紹介します。 len()メソッドを使用する方法 等価演算子(==)を使用する方法 アプローチ1:len()メソッドを使う方法 len()関数で文字列の長さを取得し、その長さが0であれば空文

  2. Pythonで文字列が空かどうかを確認する最も洗練された方法とは?

    Pythonで文字列が空かどうかを判定する最もシンプルで「Pythonic」な方法は、not 演算子を使うことです。Pythonでは空の文字列は「falsy(偽値)」として扱われ、ブール値のコンテキストでは False と評価されます。そのため、if not string: という条件式だけで空文字列のチェックが可能です。 基本的な使い方 string = if not string: print(Empty String!) 出力 Empty String! このコードを実行すると、変数 string が空であるため、「Empty String!」が出力されます。 空白文字を含む場