【Python】in演算子を2重のリストや辞書に対して使うとどうなる?

Pythonのin演算子を2重のリストや辞書に対して使うとどうなるのか 未分類

Pythonには、リストやタプルの中に特定の要素が入っているかどうかを確認できるin演算子というものがあります。

下にリスト、タプル、辞書におけるin演算子の使い方を示しておきます。

# リスト
list = [1, 2, 3, 4]
print(1 in list)  # 1がlistにあるから"True"

# タプル
tuple = (1, 2, 3, 4)
print(1 in tuple) # 1がtupleにあるから"True"

# 辞書
dict = {1:"a", 2:"b", 3:"c", 4:"d"}
print(1 in dict) # 1というキーがdictにあるから"True"

では、それぞれ2重になっている場合、どのような挙動になるのでしょうか?例えば、↓のようなとき。

list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(1 in list)  #Trueになる?

結論:2重だとFlaseになる

要素が2重になっている場合、内側のリストの中に要素があったとしてもFlaseになります。

list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(1 in list)  # False

これは、リストだけではなく、タプルや辞書であっても同じようになります。一見Trueになりそうですよね。だって、2重だとしても要素があるんですもん!

直感と反しているため、気をつける必要がありそうです。

タプルが2重のときのin演算子

2重のタプルでも確認してみます。

tuple = ((1, 2, 3), (4, 5, 6), (7, 8, 9))
print(1 in tuple)  # False

やっぱり”1 in tuple”の部分はFlaseになります。

辞書が2重のときのin演算子

次は、2重の辞書を使って確認してみます。

dict = {1:{4:"a", 5:"b", 6:"c"}, 2:{7:"d", 8:"e", 9:"f"}, 3:{10:"g", 11:"h", 12:"i"}}
print(4 in dict) # False

辞書だけちょっと不規則で分かりづらくなってしまいすみません。

外側の辞書を辞書A、内側の辞書たちを辞書Bと呼ばせてください。すると、辞書Aの中にある辞書Bには、キーが4である要素が含まれています。

感覚的には、辞書Aの中にキーが4である要素が含まれていると感じるもしれませんが、直接含まれていないためこの場合もFalseが返されます。

直下に含まれているかどうかがポイント

これまでのことから分かるように、in演算子には次のような特徴があることがわかります。

リストやタプル、辞書の直下にあるかどうかを返す

2重になっていたときに、内側のリストやタプルや辞書に要素が含まれていても、Falseが返される理由はこれだとわかりました。

逆に言えば、2重になっていたとしても直下にその要素があれば、Trueが返されるということです。

これ↓だとFlaseですが、

list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(1 in list)  # Flase

これ↓だとTrueが返されます。

list = [[1, 2, 3], [4, 5, 6], [7, 8, 9], 1]
print(1 in list)

listの最後の要素「1」は、listの直下にあるためです。同じように、タプルと辞書でも次の場合はTrueが返されます。

タプル

tuple = ((1, 2, 3), (4, 5, 6), (7, 8, 9), 1)
print(1 in tuple)

辞書

dict = {1:{4:"a", 5:"b", 6:"c"}, 2:{7:"d", 8:"e", 9:"f"}, 3:{10:"g", 11:"h", 12:"i"}, 4:"j"}
print(1 in dict) # True

コメント

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