Pythonでバイグラムの直後に現れる単語を抽出する方法
問題概要
あるテキストと、2つの単語「first」「second」が与えられたとします。このとき、テキストの中から「first second third」という形式で並んでいる箇所を探します。ここで「second」は「first」の直後に位置し、「third」は「second」の直後に位置します。
該当する箇所が見つかるたびに、その「third」にあたる単語を答えのリストへ追加し、最終的にそのリストを返します。
例えば、テキストが「lina is a good girl she is a good singer」、first =「a」、second =「good」である場合、答えは [girl, singer] となります。
解法のアプローチ
この問題は、以下の手順で解くことができます。
- テキストをスペースで分割し、単語のリストに変換する
- 結果を格納するための空のリスト res を用意する
- i を 0 からテキストの長さ - 1 までループさせる
- i + 2 がテキストの長さ未満であり、かつ text[i] が first と一致し、text[i + 1] が second と一致する場合、text[i + 2] を res に追加する
- 最後に res を返す
実装例
理解を深めるために、以下のPythonコードを見てみましょう。
class Solution(object):
def findOcurrences(self, text, first, second):
text = text.split(" ")
res = []
for i in range(len(text)):
if i + 2 < len(text) and text[i] == first and text[i + 1] == second:
res.append(text[i + 2])
return res
ob1 = Solution()
print(ob1.findOcurrences("lina is a good girl she is a good singer", "a", "good"))
入力
"lina is a good girl she is a good singer" "a" "good"
出力
['girl', 'singer']
処理の流れと計算量
このコードでは、まず split(" ") によってテキストを単語ごとに分割します。その後、各インデックス i について、text[i] が first、text[i + 1] が second と一致しているかを確認します。条件を満たしていれば、その直後の単語 text[i + 2] を結果リストに追加します。範囲外参照を防ぐため、i + 2 < len(text) のチェックを必ず行っている点がポイントです。
計算量は、テキストの単語数を n とすると、時間計算量は O(n)、空間計算量も結果リストを含めて O(n) となり、非常に効率的です。
-
Python・Pygameでウィンドウにテキストを表示する方法
Pygameは、Pythonでゲームやマルチメディアアプリケーションを開発するための人気の高いマルチメディアライブラリです。本記事では、pygameモジュールを使って画面上にカスタマイズしたフォントとテキストを表示する方法を解説します。テキストの高さ・幅・位置といった要素も考慮しながら、わかりやすく説明していきます。 処理の流れ 以下のサンプルプログラムでは、まずpygameモジュールを初期化し、画面のサイズ(モード)とウィンドウのキャプション(タイトル)を定義します。次に、表示するフォントを読み込み、テキストを描画する座標を指定します。screen.blit関数によって画面への描画を行い、w
-
Python Tkinterのafter()メソッドの使い方を徹底解説
Tkinterは、PythonでGUIアプリケーションを作成するための標準ライブラリです。ウィンドウやボタン、ラベルなどのウィジェットを作成・操作するための組み込みメソッドが多数用意されており、データの表示やGUIイベントの処理を簡単に実装できます。本記事では、その中でも特に便利なafter()メソッドの使い方について、具体的なコード例とともに詳しく解説します。after()メソッドの基本構文.after(delay, FuncName=FuncName)このメソッドは、指定した遅延時間(ミリ秒単位)が経過した後に、引数として渡した関数FuncNameを呼び出します。タイマー処理や定期的な更新