Python 配列/リストに要素/値が含まれているかどうかをチェックする

このチュートリアルでは、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ループ、innot in演算子、そしてfilter()any()count()` メソッドを使用してきました。

タイトルとURLをコピーしました