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

【Python】2つの文字列から共通しない文字だけを抽出して連結する方法

この記事では、2つの文字列が与えられたときに、両方の文字列に共通して現れない文字(ユニークな文字)だけを集めた新しい文字列を作成する方法を解説します。

例えば、「hafeez」と「kareem」という2つの文字列がある場合、そこから生成される新しい文字列は「hfzkrm」になります。つまり、片方の文字列にしか存在しない文字だけを取り出すことが目的です。手順を追う前に、まずは自分でロジックを一度考えてみてください。

ロジックが思いつかない場合は、以下の手順に従って進めてみましょう。

アルゴリズム

1. 文字列を初期化する。
2. 空の文字列を初期化する。
3. 1つ目の文字列に対してループ処理を行う。
  3.1. 現在の文字が2つ目の文字列に含まれているかどうかを確認する。
    3.1.1. 含まれていない場合、その文字を空の文字列に追加する。
4. 2つ目の文字列に対してループ処理を行う。
  4.1. 現在の文字が1つ目の文字列に含まれているかどうかを確認する。
    4.1.1. 含まれていない場合、その文字を空の文字列に追加する。
5. 結果の文字列を出力する。

それでは、実際のプログラムコードを見ていきましょう。

コード例

## 文字列の初期化
string_1 = "hafeez"
string_2 = "kareem"
## 空の文字列を初期化
new_string = ""
## 1つ目の文字列を反復処理
for char in string_1:
    ## 文字がstring_2に含まれているかチェック
    if char not in string_2:
        ## 文字をnew_stringに追加
        new_string += char
## 2つ目の文字列を反復処理
for char in string_2:
    ## 文字がstring_1に含まれているかチェック
    if char not in string_1:
        ## 文字をnew_stringに追加
        new_string += char
## new_stringを出力
print(f"New String: {new_string}")

実行結果

上記のプログラムを実行すると、次のような出力が得られます。

New String: hfzkrm

補足:パフォーマンスを向上させるポイント

このプログラムでは、各文字ごとに in 演算子を使って文字列内の検索を行っているため、時間計算量は O(n×m) となります。扱う文字列が長くなる場合は、あらかじめ set() を使って各文字列の文字を集合化しておくと、要素の存在確認が O(1) で行えるようになり、処理を大幅に高速化できます。

まとめ

本記事では、2つの文字列から共通しない文字だけを抽出して連結するPythonプログラムの考え方と実装方法を紹介しました。シンプルなループ処理でも十分実用的ですが、データ量が多いケースでは集合(set)を活用した最適化も検討してみてください。チュートリアルの内容について質問や不明な点がある場合は、ぜひコメント欄でお知らせください。

  1. Pythonで指定されたインデックスに基づいて文字列をシャッフルする方法

    文字列 s とインデックスのリスト ind が与えられ、両者は同じ長さであるとします。文字列 s は、位置 i にある文字が最終的な文字列内の ind[i] の位置へ移動するようにシャッフルされます。このとき、シャッフル後の最終的な文字列を求める必要があります。例えば、入力が s = ktoalak、ind = [0,5,1,6,2,4,3] の場合、出力は kolkata となります。解決手順この問題を解くには、以下の手順に従います。fin_str を s と同じサイズのリストとして作成し、0で初期化するs 内の各インデックス i と各文字 v に対して、次の操作を行うfin_str[ind

  2. 【Python】文字列がすべてユニークな文字で構成されているか判定する方法

    本記事では、与えられた文字列に含まれる文字がすべて一意(ユニーク)であるかどうかを判定するPythonプログラムについて、その解法とアプローチをわかりやすく解説します。 問題の概要 文字列が入力として与えられたとき、その文字列に含まれるすべての文字が重複なく一意であるかどうかを判定します。たとえば「abcde」はすべて異なる文字で構成されているためTrue、「tutorialspoint」のように同じ文字が複数回出現する場合はFalseとなります。 アプローチ この問題は、以下のような手順で効率的に解くことができます。 ブール値の配列を用意する: 各インデックス i が「アルファベット(AS