Pythonで共通しない文字のみを連結した文字列を作成する方法
この記事では、2つの文字列が与えられたときに、まず一方の文字列から両方に共通する文字をすべて取り除き、続いてもう一方の文字列にのみ含まれる文字を、前者にのみ含まれる文字と連結して新しい文字列を作成する方法を解説します。
具体例
入力 >> 文字列1:AABCD 文字列2:MNAABP 出力 >> CDMNP
この例では、「A」と「B」が両方の文字列に共通しているため除外されます。残った文字列1側の「C」「D」と、文字列2側の「M」「N」「P」を連結すると、最終的な出力は「CDMNP」になります。
アルゴリズム
uncommonstring(s1, s2) /* s1 と s2 は2つの文字列 */ ステップ1:両方の文字列をそれぞれセット st1 と st2 に変換する。 ステップ2:2つのセットの積集合(&演算子)を使って、共通する文字を取得する。 ステップ3:各文字列から、両方の文字列に共通しない文字だけを取り出す。 ステップ4:取り出した文字をスペースなしで順に連結し、最終的な文字列を作る。
セットを使うメリット
set 型は重複を自動的に排除し、要素の存在確認(in 演算子)が平均 O(1) で行えるため、文字数が多い場合でも効率的に処理できます。積集合(&)を求めるだけで共通文字を簡単に特定できるのも大きな利点です。
サンプルコード
# 共通しない文字同士を連結する関数
def uncommonstring(s1, s2):
# 両方の文字列をセットに変換
st1 = set(s1)
st2 = set(s2)
# 2つのセットの積集合から共通文字のリストを取得
lst = list(st1 & st2)
# 各文字列から共通しない文字だけを抽出して連結
finallist = [i for i in s1 if i not in lst] + [i for i in s2 if i not in lst]
print("CONCATENATED STRING IS :::", ''.join(finallist))
# ドライバープログラム
if __name__ == "__main__":
s1 = input("Enter the String ::")
s2 = input("Enter the String ::")
uncommonstring(s1, s2)
実行結果
Enter the String ::abcde Enter the String ::bdkl CONCATENATED STRING IS ::: acekl
この実行例では、abcde と bdkl の共通文字は「b」と「d」です。これらを除くと、文字列1からは「a」「c」「e」、文字列2からは「k」「l」が残り、連結された結果として「acekl」が出力されます。
まとめ
Pythonでは、セットの積集合とリスト内包表記を組み合わせることで、2つの文字列から共通文字を除去し、残りの文字だけを連結する処理を数行で簡潔に実装できます。文字列の比較や差分抽出が必要な場面で、ぜひ活用してみてください。
-
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
-
Pythonで文字列と数値を連結する方法をわかりやすく解説
Pythonで文字列と数値を連結する基本の方法Pythonでは、文字列と数値をそのまま + 演算子で結合することはできません。連結するには、str() 関数を使って数値を文字列型に変換する必要があります。以下は基本的な例です。>>> a = string >>> b = 1 >>> print(a + str(b)) string1このように str(b) によって数値 1 が文字列 1 に変換され、文字列同士として正しく連結されます。Python 2で使えたバッククォート記法についてPython 2では、数値をバッククォート(`)で囲むこ