Pythonで2つの文字列の共通部分を求める方法
はじめに
Pythonでは、2つの文字列に共通して含まれる文字(共通部分・積集合)を抽出したい場面があります。本記事では、ループ処理を使った基本的な方法と、set(集合)を活用した効率的な方法の2つのアプローチを、実際のコード例とともにわかりやすく解説します。
方法1:ループ処理を使う方法
まずは、最も基本的なループ処理による方法です。以下の手順で問題を解決できます。
- 2つの文字列と、結果を格納するための空の文字列を用意します。
- 1つ目の文字列を先頭から順に走査し、現在の文字が2つ目の文字列にも含まれており、かつ結果の文字列にまだ存在しない場合にのみ追加します。
- 最終的な結果を出力します。
コード例
# 文字列の初期化
string_1 = 'tutorialspoint'
string_2 = 'tut'
result = ''
# 両方の文字列に共通する文字を抽出
for char in string_1:
if char in string_2 and not char in result:
result += char
# 結果の出力
print(result)
上記のコードを実行すると、次のような結果が得られます。
実行結果
tu
この方法の特徴は、元の文字列での出現順序が維持される点です。文字の並び順が重要な場合に適しています。
方法2:set(集合)を使う方法
続いて、setを使ってより簡潔に共通部分を求める方法を紹介します。手順は以下の通りです。
- 2つの文字列をそれぞれsetに変換します。
intersection()メソッドを使って、2つの集合の積集合(共通部分)を求めます。join()メソッドを使って、結果を文字列に変換します。- 結果を出力します。
コード例
# 文字列の初期化 string_1 = 'tutorialspoint' string_2 = 'tut' # 積集合(共通部分)を求める result = set(string_1).intersection(string_2) # 文字列に変換 result_str = ''.join(result) # 結果の出力 print(result_str)
上記のコードを実行すると、次のような結果が得られます。
実行結果
ut
注意点として、setは要素の順序を保持しないため、出力される文字の並び順は実行環境によって変わる可能性があります。「どの文字が共通しているか」だけが分かればよい場合には、こちらの方法がコード量も少なくおすすめです。
まとめ
本記事では、Pythonで2つの文字列の共通部分を求める2つの方法を紹介しました。
- ループ処理による方法: 出現順序を維持できる
- setを使った方法: コードが簡潔で書きやすい
用途に応じて両者を使い分けるとよいでしょう。記事についてご不明な点やご質問がある場合は、コメント欄でお気軽にお知らせください。
-
Pythonのcasefold()メソッドとは?文字列の小文字変換と比較方法を解説
Pythonのcasefold()は、文字列内の英字をすべて小文字に変換するためのメソッドです。lower()と似ていますが、より積極的な変換を行う点が特徴で、ドイツ語の「ß」が「ss」に変換されるなど、国際化対応において強力な働きをします。2つの文字列に対してcasefold()を適用すれば、大文字・小文字の違いを無視して値を一致させることができます。そのため、ユーザー入力の比較や検索処理などで非常に役立ちます。casefold()の基本的な使い方次の例では、文字列にcasefold()を適用し、すべて小文字に変換された結果を出力しています。コード例string = BestTutorial
-
Pythonのintersection()関数とは?集合の共通要素(積集合)を求める方法
この記事では、Pythonのセット(集合)に対して実行できるintersection()関数について詳しく解説します。数学における「積集合(インターセクション)」とは、2つの集合から共通する要素を見つけ出すことを指します。構文<セット名>.intersection(<セットa1>, <セットa2>, …)戻り値引数として渡されたすべての集合に共通する要素(積集合)が、新しいセットとして返されます。使用例set_1 = {t,u,t,o,r,i,a,l} set_2 = {p,o,i,n,t} set_3 = {t,u,t} # 2つの集合の積集合 print