このチュートリアルでは、Pythonでリストに要素や値が含まれているかどうかをチェックする方法を見ていきます。
ここでは、いくつかの動物を含む文字列のリストを使用します。
animals = ['Dog', 'Cat', 'Bird', 'Fish']
forループでリストに要素が含まれているかチェックする
リストに要素が含まれているかどうかを調べる簡単で初歩的な方法は、リスト内をループして、今いる項目が探しているものと一致するかどうかをチェックすることです。
ここでは、for
ループを使ってみましょう。
for animal in animals:
if animal == 'Bird':
print('Chirp!')
このコードは次のような結果になります。
Chirp!
リストがin演算子を持つ要素を含むかどうかのチェック
さて、より簡潔な方法は、組み込みの in
演算子を使うことです。
ただし、 for
文の代わりに if
文を使います。
in演算子は
for文の代わりに
if文を使用します。
ifと組み合わせた場合、ある要素がシーケンスに存在するかどうかを判定して
Trueを返します。
in 演算子のシンタックスは次のようになります。
element in list
この演算子を使うことで、先ほどのコードを1つの文に短縮することができます。
if 'Bird' in animals: print('Chirp')
このコード片は次のように出力されます。
Chirp
この方法は、for
ループと同じ効率です。
なぜなら、このように使われる in
演算子は list.__contains__
関数を呼び出して、本質的にリストをループしているからです。
オペレータにない要素を含むリストかどうかをチェックする
これに対して、 in
演算子の論理的な反対である not in
演算子を使用することができます。
これは、ある要素がリストに含まれていない場合に True
を返します。
先ほどのコード例を not in
演算子を利用するように書き直してみましょう。
if 'Bird' not in animals: print('Chirp')
このコードを実行しても、Bird
はリストの中に存在しているので、何も生成されません。
しかし、試しに Wolf
を入れてみると……。
if 'Wolf' not in animals: print('Howl')
このコードの結果は
Howl
ラムダでリストに要素が含まれているかどうかをチェックする
ある要素が存在するかどうかを確認するもう一つの方法は、砂をふるいにかけて最後に貝殻が残っているかどうかを確認するように、その要素以外をすべて除外することです。
組み込みの filter()
メソッドは、ラムダ関数とリストを引数として受け取ります。
ここではラムダ関数を使って、 animals
リストの中に 'Bird'
という文字列があるかどうかをチェックします。
そして、 filter()
メソッドは結果ではなく filter
オブジェクトを返すので、結果を list()
で囲みます。
もし、 filter
オブジェクトをリストにパックすれば、フィルタリングの後に残った要素を含むことになります。
retrieved_elements = list(filter(lambda x: 'Bird' in x, animals))
print(retrieved_elements)
このコードの結果は
['Bird']
さて、この方法は最も効率的ではありません。
これまで使ってきた3つのアプローチよりもかなり遅いのです。
filter()` メソッド自体がジェネレーター関数と同等です。
(item for item in iterable if function(item))
このコードのパフォーマンスが低下しているのは、特に、結果を最終的にリストに変換していることと、各反復処理で項目に対して関数を実行していることに起因しています。
リストが要素を含むかどうかをany()でチェックする
これは、リストの中にある要素のインスタンスが (少なくとも1つ) あるかどうかをチェックするための単なるヘルパー関数です。
これは、リスト内に要素のインスタンスが (少なくとも 1 つ) あるかどうかをチェックするヘルパー関数です。
要素の有無に基づいて、 True
または False
を返します。
if any(element in 'Bird' for element in animals):
print('Chirp')
この結果は True
なので、 print()
文が呼び出されます。
Chirp
この方法は、要素の有無をチェックする効率的な方法でもあります。
最初の3つの方法と同じくらい効率的です。
count() を使ってリストに要素が含まれているかどうかをチェックする
最後に、count()
関数を使って、要素があるかどうかをチェックします。
list.count(element)
この関数は、与えられた要素がシーケンスの中で何回現れるかを返します。
0より大きければ、与えられた項目がリストの中にあることが保証されます。
では、count()
関数の結果を確認してみましょう。
if animals.count('Bird') > 0:
print("Chirp")
count()`関数は本来、リストをループして出現回数をチェックするものですが、このコードの結果は以下のようになります。
Chirp
結論
このチュートリアルでは、ある要素がリスト内に存在するかどうかをチェックするためのいくつかの方法について説明しました。
forループ、
inと
not in演算子、そして
filter()、
any()、
count()` メソッドを使用してきました。