【Python】listの要素に複数の要素が含まれているか判定

プログラム

Pythonでlistに指定の要素が含まれていた時に何かしらの処理をしたい時があります。
指定の要素が1つの場合、if文以下のように処理できます。

まずはlistを用意します。

kanto = ['茨城県', '栃木県', '群馬県', '埼玉県', '千葉県', '東京都', '神奈川県']

次に神奈川県を探したいと思います。

if ('神奈川県' in kanto) == True:
    print('神奈川県が含まれています')
--------------------------------------------------
神奈川県が含まれています

次に、神奈川県に加えて東京都が含まれるかを探します。

if ('神奈川県' in kanto) == True & ('東京都' in kanto) == True:
    print('神奈川県と東京都が含まれています')
--------------------------------------------------
神奈川県と東京都が含まれています

2つくらいなら&で連結しても手間じゃないと思いますが、
数がもっと増えるとコピペすればいいのですが、
もっと簡潔にしたいと思います。

search = ['神奈川県', '東京都']

if (search in kanto) == True:
    print('神奈川県と東京都が含まれています')
--------------------------------------------------

これだと含まれるはずですが、出力がされませんでした。
listではなく、set()を使うとできるようになりました。

if (set(search) <= set(kanto)) == True:
    print('神奈川県と東京都が含まれています')
--------------------------------------------------
神奈川県と東京都が含まれています

ちなみに、set()を使わずに書いても問題なさそうに見えます。

if (search <= kanto) == True:
    print('神奈川県と東京都が含まれています')
--------------------------------------------------
神奈川県と東京都が含まれています

含まれないはずの沖縄県と比較してみます。

['沖縄県'] <= kanto
--------------------------------------------------
True

Trueが返ってきてしまいました。
鹿児島県で比較すると

['鹿児島県'] <= kanto
--------------------------------------------------
False

鹿児島県ならFalseが返ってきました。
これで改めて、set()で実行すると

set(['沖縄県']) <= set(kanto)
--------------------------------------------------
False

Falseが返ってきました。

listで比較をしてしまうと対応した順番の要素、今回の例でいえば沖縄県とkantoの
1番目の要素、茨城県の何かしら(文字コード?)で比較してしまうようです。
実際に要素が同じかどうかを確認していません。
これをset()で集合の形で比較をすると回避できるようになりました。

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