タイトルの通り、あるリストの要素の一つが他のリストの中に存在するかチェックしたい場面があるかと思います。僕の場合CheckiOの問題を解いている際に必要になりましたが、実務でも使う機会があると思います。
どうしたものかと探したところ、こちらのStack Overflowの記事に方法がまとまっていたので紹介します。
やりたいこと
あるリストaと、別のリストbがあり、リストaの要素の一つがリストbの中に存在する場合True、存在しない場合Falseを返すという関数を作ることを目標とします。
Trueが返るリストの例
a = ['A', 'B']
b = ['B', 'C', 'D']
リストaの'B'がリストbに存在するためTrue
Falseが返るリストの例
a = ['A', 'B']
b = ['C', 'D', 'E']
リストaの'A'と'B'どちらもリストbに存在しないためFalse
方法
方法1: any()とジェネレータ式を使う
def func1(a, b):
return any(i in b for i in a)
any()とジェネレータ式を使う方法です。for i in a
で要素iを一つずつ取り出し、i in b
でその要素iがbの中に存在するかチェックしていきます。ジェネレータを利用するので存在した場合が分かった時点でTrueを返します。
方法2: setの共通部分を使う
def func2(a, b):
len(set(a) & set(b)) != 0
aとbを集合に変換し、それらの共通部分があるかどうかでチェックする方法です。なかなか読みやすく仕上がりますね。
方法3: isdisjoint()を使う
def func3(a, b):
return not set(a).isdisjoint(b)
方法2とは逆で共通部分を持たない場合Trueを返すisdisjoint()を使います。個人的にはnotがちょっと嫌な感じがします。
まとめ
以上、あるリストの要素の一つが他のリストの中に存在するかチェックする方法についてまとめてみました。
パフォーマンスの比較などは行っていませんが、可読性も考慮しつつ自分に合ったものを選択するといいのではないでしょうか。
参考
python - one-liner to check if at least one item in list exists in another list? - Stack Overflow