【初心者向け】Pythonで文章から重複する単語をすべて削除する方法
プログラミングでは、与えられた文章から重複する単語を取り除いて整理したい場面がよくあります。本記事では、Pythonの標準ライブラリ「collections.Counter」を活用して、文章内の重複単語を効率的に削除する方法を解説します。
処理の概要
たとえば、次のような文章が与えられたとします。
入力:I am a peaceful soul and blissful soul. 出力:I am a peaceful soul and blissful.
このように、「soul」という単語が2回出現している場合、2回目以降の出現を削除し、各単語が1回だけ含まれる文章を作成します。
アルゴリズムの手順
重複単語の削除は、以下のステップで実装できます。
- Step 1: 入力された文章をスペース区切りで分割し、単語のリストを作成します。
- Step 2: リスト内の各文字列(単語)を結合できる状態に整えます。
- Step 3: Counterメソッドを使って辞書を作成します。キーに単語、値に出現回数(頻度)が格納されます。Counterは重複するキーを自動的に1つにまとめてくれるため、これだけで重複除去が実現します。
- Step 4: 辞書のキー(=ユニークな単語)だけを取り出し、スペースで連結して1つの文章に戻します。
サンプルコード
以下は、上記のアルゴリズムを実装したPythonコードです。
from collections import Counter
def remove_duplicates(st):
# 文章をスペースで分割して単語リストを作成
words = st.split(" ")
# Counterで各単語の出現頻度をカウント(重複キーは自動的に統合される)
dupli = Counter(words)
# ユニークな単語だけを連結して文章に戻す
result = " ".join(dupli.keys())
print("重複削除後の文章 ::>", result)
# メイン処理
if __name__ == "__main__":
st = input("Enter the sentence : ")
remove_duplicates(st)コードのポイント
- Counterの特性: collectionsモジュールのCounterは、リスト内の要素をキー、出現回数を値とする辞書を生成します。同じ単語が複数回登場しても、キーとしては1回だけ保持されます。
- 順序の保持: Python 3.7以降では辞書が挿入順を保持するため、元の文章での出現順序を維持したまま重複だけを除去できます。
- split()とjoin(): split()で文章を単語に分解し、join()で再び文章に組み立てるのが定番のパターンです。
実行結果
実際にプログラムを実行すると、以下のように動作します。
Enter the sentence : i am a peaceful soul and blissful soul 重複削除後の文章 ::> i am a peaceful soul and blissful
2回目に出現した「soul」が削除され、各単語が1回ずつ含まれた文章が出力されました。
まとめ
Pythonで文章から重複する単語を削除するには、split() → Counter → join()というシンプルな流れが有効です。Counterを使えば自前でループを書いて重複判定をする必要がなく、短いコードで直感的に実装できます。テキスト処理やデータクレンジングの基礎として、ぜひ活用してみてください。
-
Pythonで二分探索木(BST)から指定範囲外のノードをすべて削除する方法
問題の概要二分探索木(BST)と2つの値 low、high が与えられたとき、[low, high] の範囲(境界値を含む)に該当しないノードをすべて木から削除するプログラムを作成します。例として、次のようなBSTを考えてみましょう。ここで low = 7、high = 10 とした場合、範囲外のノード(5 や 1 など)が削除され、出力は次のようになります。解法のアプローチこの問題は再帰を利用することで簡潔に解くことができます。手順は以下の通りです。関数 solve() を定義します。引数は root(現在のノード)、low、high の3つです。root が null(空)の場合は何もせず
-
指定された文字列のすべての順列を出力するPythonプログラム
本記事では、以下の問題に対する解決策について詳しく学んでいきます。 問題文 1つの文字列が与えられたとき、その文字列から作成できるすべての順列(並べ替えの組み合わせ)を表示する必要があります。 それでは、以下の実装例で具体的な解決策を見ていきましょう。 実装例 # リストを文字列に変換 def toString(List): return .join(List) # 順列の生成 def permute(a, l, r): if l == r: print(toString(a)) else: for i in range(l, r +