Pythonで2つの文字列に共通する単語の数を求める方法
2つの文字列 s0 と s1 があり、それぞれが1つの文を表しているとします。このとき、両方の文に共通して含まれる単語(重複は数えない)の個数を求める問題を考えてみましょう。なお、単語の比較では大文字・小文字を区別しないため、「tom」と「ToM」は同じ単語として扱われます。
たとえば、入力が s0 = "i love python coding"、s1 = "coding in python is easy" の場合、共通する単語は ['python', 'coding'] の2つなので、出力は 2 になります。
解決のための手順
この問題は、次の手順で解くことができます。
s0とs1をすべて小文字に変換するs0List:s0 を空白で分割した単語のリストを作成するs1List:s1 を空白で分割した単語のリストを作成する- それぞれのリストからセット(set)を生成し、積集合を求めることで共通単語を取得する
- 積集合の要素数を返す
Pythonの set(集合型)を使うと、重複の除去と共通要素の抽出が簡単に行えます。& 演算子(または intersection() メソッド)で2つの集合の積集合を計算できるのがポイントです。
実装例
それでは、実際のコードを見て理解を深めましょう。
class Solution:
def solve(self, s0, s1):
s0 = s0.lower()
s1 = s1.lower()
s0List = s0.split(" ")
s1List = s1.split(" ")
return len(list(set(s0List) & set(s1List)))
ob = Solution()
S = "i love python coding"
T = "coding in python is easy"
print(ob.solve(S,T))
入力
"i love python coding", "coding in python is easy"
出力
2
コードの解説
処理の流れを順番に見ていきましょう。
lower()メソッドで文字列全体を小文字化し、大文字・小文字の違いによる判定ミスを防ぎます。split(" ")で文を空白区切りで分割し、単語のリストを作成します。set()で各リストを集合に変換すると、重複する単語が自動的に除外されます。&演算子で2つの集合の積集合(共通する単語のみ)を取得します。len()でその要素数を返せば、共通単語の個数が求まります。
このように、Pythonの集合演算を活用すれば、ループや条件分岐を書かずとも簡潔に共通単語をカウントできます。計算量も各文字列の長さにほぼ比例するため、実用的なテキスト比較にも十分対応できるアプローチです。
-
Pythonで2つの数の公約数を求めるプログラムの書き方
はじめに この記事では、以下の問題文に対する解決方法について学んでいきます。 問題文 2つの整数が与えられたとき、それらに共通する約数(公約数)の個数を表示する必要があります。 アプローチの考え方 まず、入力として受け取った2つの数のうち、小さい方の値(最小値)を計算します。続いて、1からその最小値までの各値で2つの数を順番に割っていき、両方の数を割り切ることができるかどうかをループ処理で確認します。 条件が真(True)と評価されるたびに、カウンターを1ずつ増加させます。最終的なカウンターの値が、2つの数の公約数の個数となります。 実装例 それでは、以下のコードで実際の実装を見てみましょう。
-
【Python入門】2つの文字列から珍しい単語(ユニークな単語)を見つけるプログラムの作り方
はじめに この記事では、以下の問題文に対する解決方法を、実際のコード例とともにわかりやすく解説します。 問題文 2つの文字列が与えられたとき、その中から「珍しい単語」(どちらか一方の文字列にしか出現しない単語)をすべて抽出することを目標とします。両方の文字列に共通して含まれる単語は除外します。 解決のアプローチ ここでは辞書(dict)を使った出現回数のカウント方式を採用します。手順は次のとおりです。 空の辞書を用意する 各文字列をsplit()で単語ごとに分割する 各単語の出現回数を辞書に記録する 出現回数がちょうど1回の単語だけを結果として返す 実装例 # 珍しい単語を見つける関