🔖

【初心者向け】Pythonの in と not in の使い方のまとめ

に公開

はじめに

Pythonで頻繁に使われるキーワードに innot in があります。

  • x in リスト:x がリストに含まれていれば True
  • x not in リスト:x がリストに含まれていなければ Truein の否定)

とてもシンプルで直感的に使える構文ですが、
リスト以外にも使える ことや、文字列・辞書との違いなど、
意外と奥が深いポイントもあります。

本記事では、Pythonの in / not in の使い方を整理して解説します。

1. リストに対する使い方

最もよく使われるのは、リストに特定の値が含まれているかを調べる使い方です。

fruits = ["apple", "banana", "orange"]

"apple" in fruits     # True
"grape" not in fruits # True
  • in:値が含まれていれば True を返します
  • not in:値が含まれていなければ True を返します

2. 文字列に対する使い方

文字列に対しても in / not in は使えます。

text = "Hello, world!"

"Hello" in text     # True
"bye" not in text   # True
  • 部分一致として判定される ので便利です。

部分一致として判定される → 指定した文字列が対象の文字列の「一部に含まれていれば True」になります。

"o," in text    # True(カンマも含めて一致している)
"hello" in text # False(大文字小文字が異なる)

3. 辞書に対する使い方

辞書に対して in を使うと、キーだけが対象になります。

person = {"name": "Alice", "age": 30}

"name" in person    # True
"Alice" in person   # False(値は対象にならない)

✅ 値に対して確認したいとき

辞書の値に対して in を使うときは、以下のように記述します。

"Alice" in person.values()  # True

4. for 文での in の使い方

for ループの中でも in は頻出です。

for fruit in ["apple", "banana"]:
    print(fruit)

これは、「リストの中の要素を1つずつ取り出して処理する」ために in を使っています。

✅ 実行結果

apple
banana

要素を順番に処理したいときは、必ずといっていいほど for ~ in ~ を使います。
for ループをさらに便利にする方法については、enumerate() の使い方も参考になります。

5. 補足:in / not in の仕組みについて(参考情報)

in は内部的に __contains__() を呼び出しています。
(= "a" in ["a", "b"]["a", "b"].__contains__("a") と同等)

実は in / not in は、Pythonの内部的には __contains__() という特殊メソッドが使われています。

"a" in ["a", "b"]
# 実際は ["a", "b"].__contains__("a") と同じ意味になります

この仕組みを知っておくと、
クラスを自作する際に、in の挙動をオリジナルで定義することもできるといった応用が可能になります。

ただしこの内容は、Pythonをある程度使い慣れてから使用することが多いため、
初学者の方は「内部ではこうなっているのか」と参考程度に知っておくだけで十分です。

おわりに

Pythonの in / not in は、リストだけでなく、
文字列・辞書・集合など、複数の要素を持つデータ型すべてに対して使える便利な演算子です。

初心者のうちは「リストに含まれるか?」で覚えがちですが、
文字列の検索や辞書のキー確認など、さまざまな場面で使用できます。

また、今回は詳しく紹介していないですが、タプル・集合・rangeオブジェクトなどにも in / not in は使えます。

3 in (1, 2, 3).         # True(タプル)
"a" in {"a", "b"}       # True(集合)
2 in range(5).          # True(range)

本記事が参考になれば幸いです。

Discussion