Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで指定した複数の単語が文のリスト内に同時に含まれているか確認する方法

短い文を要素として持つリストがあり、さらに別のリストには、それらの文で使われている単語がいくつか格納されているとします。ここで、「別のリストから選んだ2つ以上の単語が、文のリスト内の同じ文に同時に存在しているかどうか」を調べたいケースはよくあります。

本記事では、Pythonでこの問題を解決するための3つの異なるアプローチを、具体的なコード例とともに紹介します。

方法1: append と for ループを使う

まずは最も基本的な方法です。for ループと in 演算子を組み合わせて、各文に目的の単語が含まれているかどうかを1つずつチェックします。そして len 関数を使い、見つかった単語の数が単語リストの要素数と一致した場合のみ、その文を結果リストに追加(append)していきます。

コード例

list_sen = ['Eggs on Sunday', 'Fruits on Monday', 'Eggs and Fruits on Wednesday']
list_wrd = ['Eggs', 'Fruits']

print("Given list of sentences: \n",list_sen)
print("Given list of words: \n",list_wrd)

res = []
for x in list_sen:
    k = [w for w in list_wrd if w in x]
    if (len(k) == len(list_wrd)):
        res.append(x)
print(res)

実行結果

上記のコードを実行すると、次のような出力が得られます。

Given list of sentences:
['Eggs on Sunday', 'Fruits on Monday', 'Eggs and Fruits on Wednesday']
Given list of words:
['Eggs', 'Fruits']
['Eggs and Fruits on Wednesday']

この例では、'Eggs' と 'Fruits' の両方が含まれている文は「Eggs and Fruits on Wednesday」だけであるため、これが結果として出力されています。

方法2: all 関数を使う

次に、組み込み関数 all を活用する方法を見てみましょう。for ループで各文に対して「すべての単語がその文に含まれているか」を判定し、all 関数によって全単語の存在を一括して検証します。リスト内包表記と組み合わせることで、コードをより簡潔に書くことができます。

コード例

list_sen = ['Eggs on Sunday', 'Fruits on Monday', 'Eggs and Fruits on Wednesday']
list_wrd = ['Eggs', 'Fruits']

print("Given list of sentences: \n",list_sen)
print("Given list of words: \n",list_wrd)

res = [all([k in s for k in list_wrd]) for s in list_sen]
print("\nThe sentence containing the words:")
print([list_sen[i] for i in range(0, len(res)) if res[i]])

実行結果

上記のコードを実行すると、次のような出力が得られます。

Given list of sentences:
['Eggs on Sunday', 'Fruits on Monday', 'Eggs and Fruits on Wednesday']
Given list of words:
['Eggs', 'Fruits']

The sentence containing the words:
['Eggs and Fruits on Wednesday']

方法3: lambda と map を使う

3つ目の方法は、lambda 式と map 関数を組み合わせた関数型プログラミング的なアプローチです。split 関数で各文を単語に分割し、その中に指定されたすべての単語が含まれているかどうかをチェックします。map 関数を使うことで、この判定ロジックを文のリストの各要素に対して繰り返し適用できます。

コード例

list_sen = ['Eggs on Sunday', 'Fruits on Monday', 'Eggs and Fruits on Wednesday']
list_wrd = ['Eggs', 'Fruits']

print("Given list of sentences: \n",list_sen)
print("Given list of words: \n",list_wrd)

res = list(map(lambda i: all(map(lambda j:j in i.split(),
list_wrd)), list_sen))

print("\nThe sentence containing the words:")
print([list_sen[i] for i in range(0, len(res)) if res[i]])

実行結果

上記のコードを実行すると、次のような出力が得られます。

Given list of sentences:
['Eggs on Sunday', 'Fruits on Monday', 'Eggs and Fruits on Wednesday']
Given list of words:
['Eggs', 'Fruits']

The sentence containing the words:
['Eggs and Fruits on Wednesday']

まとめ

いずれの方法でも、単語リスト内のすべての単語を含む文「Eggs and Fruits on Wednesday」だけが正しく抽出されました。

  • for ループ + append: 処理の流れが分かりやすく、初心者にも理解しやすい方法です。
  • all 関数: リスト内包表記と組み合わせることで、簡潔なコードを実現できます。
  • lambda + map: split による単語分割を行うため、部分一致ではなく完全な単語一致で判定したい場合に有効です。

用途や可読性の要件に応じて、最適な方法を選択してください。

  1. Pythonでネストされたリストの中に特定のリストが存在するか確認する方法

    Pythonでは、リストをネスト(入れ子)にすることができます。つまり、リストの要素そのものがリストであるケースです。本記事では、ある特定のリストが、外側のより大きなリストの要素として存在するかどうかを判定する方法を解説します。方法1:in演算子を使う最もシンプルで直感的な方法は、in 演算子を使うことです。内側のリストが、外側のリストの要素として含まれているかどうかを直接チェックできます。コード例listA = [[-9, -1, 3], [11, -8], [-4, 434, 0]] search_list = [-4, 434, 0] # 元のリストを表示 print(Given Li

  2. Pythonで文字列内の単語を逆順に並べ替える方法

    Pythonでは、split()メソッドとreversed()関数を組み合わせることで、文字列内のすべての単語を簡単に逆順にすることができます。この記事では、具体的な手順とサンプルコードを通じて、その実装方法を解説します。 やりたいこと まず、入力と出力のイメージをサンプルで確認しましょう。 入力: string = I am a python programmer 出力: programmer python a am I 別の例も見てみます。 入力: string = tutorialspoint is a educational website 出力: website educatio