inの概要
| 要素の存在確認とループ処理 Python予約語 | ||
|
in 概要 わかりやすく説明 |
||
|
inの考え方をイメージで理解

inを使った要素の存在確認
あらかじめ用意したリストの中に、指定した特定の文字列データが含まれているかどうかを if 文でスキャンする最も基本的な例です。
# リスト内の要素の存在を確認
fruits = ["りんご", "バナナ", "オレンジ"]
if "バナナ" in fruits:
# リストの中に「バナナ」が見つかったため(True)、ここを通過します
print("バナナはリストに含まれています")
not inを使った要素の不在確認
「データが含まれていないこと」を検知したい場合に、not を前に挟むことで、直感的で読みやすい英語の構文のように条件式を記述できます。
# 要素がリストに含まれていないか確認
fruits = ["りんご", "バナナ", "オレンジ"]
if "イチゴ" not in fruits:
# リストの中に「イチゴ」が存在しないため(True)、ここを通過します
print("イチゴはリストに含まれていません")
inをforループと組み合わせて使う(反復処理)
for 変数 in コレクション: という組み合わせにより、コレクションの中身が尽きるまで、要素を自動的に先頭から1つずつ変数へ取り出してループを回す重要な使い方です。
# リストの要素を順に処理
fruits = ["りんご", "バナナ", "オレンジ"]
for fruit in fruits:
# ループが回るたびに、fruit の中身が「りんご」→「バナナ」→「オレンジ」と切り替わります
print(fruit)
辞書でinを使う
辞書(dict)に対して in を直接適用すると、登録されている「キー(見出し)」を対象にして存在チェックが行われます。
# 辞書のキーの存在確認
person = {"name": "太郎", "age": 25, "city": "東京"}
if "age" in person:
# キーの中に「age」という登録を発見したため通過(値の 25 を見ているわけではありません)
print(f"年齢の情報があります。値は {person['age']} です")
文字列でinを使う(部分一致判定)
文字列(str)に対して in を使用すると、テキスト全体の中に「指定したキーワード(部分文字列)」が埋め込まれているかを判定できます。
# 文字列の部分一致
text = "こんにちは、Pythonの世界へようこそ!"
if "Python" in text:
print("文章の中に『Python』という単語が含まれています")
- 大文字・小文字は厳密に区別されるため、
"python" in textと書いた場合はFalseになります。
inの実践的な使用例
ユーザーから入力されたデータが、許可されたホワイトリスト(安全なデータ一覧)の中に正しく収まっているかをバリデーション(検証)する実務の手法です。
# 入力された曜日がリストに含まれているか確認
weekdays = ["月曜日", "火曜日", "水曜日", "木曜日", "金曜日"]
day = "土曜日" # ユーザーからの入力を想定
if day in weekdays:
print(f"{day} は平日です")
else:
print(f"{day} は週末か、または正しい曜日ではありません")
inの注意点
- 大規模なデータに対して、リスト(list)のまま in を使うと速度低下を引き起こす(超重要):リストに対する
inの検索処理は、内部的には「先頭から順番に1個ずつ総当たりで探す(線形探索)」という泥臭い方法をとっています。そのため、リストの要素数が数万、数百万規模に膨れ上がると、inの判定にかかる時間が劇的に遅くなります。大量のデータから高速に検索を行いたい場合は、リストではなく、ハッシュアルゴリズムを用いて一瞬で検索を完了できるset(集合) やdict(辞書) へデータを変換してinを使うのが実務の必須テクニックです。# 【実務での最適化例】 huge_list = [i for i in range(10000000)] # 1千万個の巨大なデータリスト(検索が激重) huge_set = set(huge_list) # 高速検索用に「セット型」へ変換 # 探す処理 if 9999999 in huge_set: # リストの100万倍以上のスピードで一瞬で True を弾き出します print("発見しました") - 辞書の値(バループ)を調べたいときは専用メソッドが必須:前述の通り、
"太郎" in personのように直接書くだけでは、値にある「太郎」を検索することはできずFalseになります。値をターゲットにしたい場合は、必ず明確に.values()を後ろに繋いで指示する必要があります。
inのよくある質問
- Q: 辞書の「値(バリュー)」の中に、特定のデータがあるかを調べるにはどう書けばいいですか?
- A: 辞書名に対して
.values()をドットで繋ぐことで、キーを除外した「値の一覧」を抽出できるため、これに対してinを使用します。person = {"name": "太郎", "age": 25, "city": "東京"} # 値のリストから「太郎」を検索 if "太郎" in person.values(): print("値の中に『太郎』が存在します")なお、同様にキーと値をセットにしたタプル形式で探したい場合は
person.items()を利用します。 - Q: `in` は数値のデータ型(int や float)に対して直接使用できますか?
- A: 完全に不可能です。
inは、内部に複数の要素を内包しているオブジェクト(反復可能オブジェクト:イテラブル)に対してのみ使用できる演算子です。そのため、単一の数値であるif 5 in 500:のようなコードを書くと、中身を分解して探すことができないためTypeError: argument of type 'int' is not iterableというエラーが発生します。必ず、数値のリスト[500, 600]や範囲を示すrange()を対象にしてください。
まとめ
in は、Pythonの特徴である「シンプルで英語のように読める美しいコード」を体現するための、存在確認と繰り返し制御に不可欠なコア予約語です。
- コレクション内部の要素の有無を高速にスキャンし、
True/Falseの論理値を出力する。 for構文と連動することで、データの全要素をループ処理するためのイテレータとして動作する。- データ規模が大きいときは、リスト(低速)からセットや辞書(高速)へとコンテキストを切り替えてパフォーマンスを確保する。
Web APIから取得したJSONデータの解析や、データベースから抽出した大量のログデータのフィルタリングなど、実務のあらゆる場面において in は処理の起点となります。各データ型ごとの特性や検索スピード(計算量)の違いを意識し、ワンランク上の洗練されたコードを構築しましょう。