2つの文字列に共通する単語を削除するPythonプログラムの書き方
2つの文字列の中から、両方に共通して含まれる単語を取り除きたいケースはよくあります。そのような場合には、2つの文字列を引数として受け取る関数を定義し、文字列を空白で分割したうえで、リスト内包表記を使って結果をフィルタリングするのが効果的です。
この記事では、辞書を使って単語の出現回数をカウントし、共通しない単語だけを抽出する方法を、サンプルコードと実行結果とともにわかりやすく解説します。
サンプルコード
以下が実際の実装例です。
def common_words_filter(my_string_1, my_string_2):
my_word_count = {}
for word in my_string_1.split():
my_word_count[word] = my_word_count.get(word, 0) + 1
for word in my_string_2.split():
my_word_count[word] = my_word_count.get(word, 0) + 1
return [word for word in my_word_count if my_word_count[word] == 1]
my_string_1 = "Python is fun"
print("1つ目の文字列:")
print(my_string_1)
my_string_2 = "Python is fun to learn"
print("2つ目の文字列:")
print(my_string_2)
print("結果:")
print(common_words_filter(my_string_1, my_string_2))
出力結果
1つ目の文字列: Python is fun 2つ目の文字列: Python is fun to learn 結果: ['to', 'learn']
コードの解説
common_words_filter という名前の関数を定義し、2つの文字列を引数として受け取ります。
関数内で空の辞書 my_word_count を用意します。
1つ目の文字列を split() メソッドで空白ごとに分割し、各単語について繰り返し処理を行います。
get() メソッドを使うことで、辞書にキーが存在しない場合でもエラーにならずデフォルト値の0を取得でき、それに1を加算して出現回数を記録します。
2つ目の文字列に対しても同じ処理を実行し、すべての単語の出現回数を集計します。
最後にリスト内包表記で辞書を走査し、出現回数がちょうど1回の単語(=どちらか一方の文字列にしか存在しない単語)だけを抽出して返します。これにより、両方の文字列に共通する単語が結果から除外されます。
関数の外側では、比較対象となる2つの文字列を定義し、コンソールに表示しています。
必要な引数を渡して関数を呼び出すと、共通する単語が取り除かれた結果がコンソールに出力されます。
補足:collections.Counter を使った別の書き方
標準ライブラリの collections.Counter を利用すると、出現回数の集計をより簡潔に記述できます。
from collections import Counter def common_words_filter(my_string_1, my_string_2): counts = Counter(my_string_1.split()) + Counter(my_string_2.split()) return [word for word, cnt in counts.items() if cnt == 1]
このように書けば手動のループ処理を減らせるため、コードの可読性と保守性が向上します。用途に応じて、どちらの実装方法も活用してみてください。
-
Pythonで2つの数の公約数を求めるプログラムの書き方
はじめに この記事では、以下の問題文に対する解決方法について学んでいきます。 問題文 2つの整数が与えられたとき、それらに共通する約数(公約数)の個数を表示する必要があります。 アプローチの考え方 まず、入力として受け取った2つの数のうち、小さい方の値(最小値)を計算します。続いて、1からその最小値までの各値で2つの数を順番に割っていき、両方の数を割り切ることができるかどうかをループ処理で確認します。 条件が真(True)と評価されるたびに、カウンターを1ずつ増加させます。最終的なカウンターの値が、2つの数の公約数の個数となります。 実装例 それでは、以下のコードで実際の実装を見てみましょう。
-
【Python入門】2つの文字列から珍しい単語(ユニークな単語)を見つけるプログラムの作り方
はじめに この記事では、以下の問題文に対する解決方法を、実際のコード例とともにわかりやすく解説します。 問題文 2つの文字列が与えられたとき、その中から「珍しい単語」(どちらか一方の文字列にしか出現しない単語)をすべて抽出することを目標とします。両方の文字列に共通して含まれる単語は除外します。 解決のアプローチ ここでは辞書(dict)を使った出現回数のカウント方式を採用します。手順は次のとおりです。 空の辞書を用意する 各文字列をsplit()で単語ごとに分割する 各単語の出現回数を辞書に記録する 出現回数がちょうど1回の単語だけを結果として返す 実装例 # 珍しい単語を見つける関