カテゴリ: Python 更新日: 2026/02/01

Pythonのセットの使いどころ!リストよりも高速な重複チェック

Pythonのセットの使いどころ!リストよりも高速な重複チェック
Pythonのセットの使いどころ!リストよりも高速な重複チェック

先生と生徒の会話形式で理解しよう

生徒

「Pythonでデータの中に同じものが入っているかを調べたいんですが、リストを使うと遅くなることはありますか?」

先生

「はい、データ量が多いとリストでの重複チェックは遅くなります。でも、set(セット)を使うととても高速にチェックできますよ。」

生徒

「セットって重複を自動で消すって聞いたことがありますが、それが速さにも関係あるんですか?」

先生

「そうです。セットは内部的に『ハッシュテーブル』という仕組みを使っていて、存在確認がとても速いんです。」

生徒

「じゃあリストよりもセットを使ったほうが効率的な場合があるんですね!」

-

1. リスト(list)による重複チェックの仕組みと注意点

1. リスト(list)による重複チェックの仕組みと注意点
1. リスト(list)による重複チェックの仕組みと注意点

Pythonのリスト(list)は、複数のデータを順番に並べて管理する、最も基本的なデータ型の一つです。リストには「同じ値を何度でも入れられる」という特徴がありますが、特定の値が含まれているかを確認する(存在確認)際には注意が必要です。

リストの検索は、中身を端から順番に一つずつ確認していく「線形探索」という仕組みで行われます。たとえば、100個のデータが入った箱の中から1つの名前を探すとき、最悪の場合は100回中身を確認しなければなりません。


# プログラミング未経験でもわかるリスト検索の例
# 好きなフルーツのリスト
fruits_list = ["りんご", "みかん", "バナナ", "ぶどう", "いちご"]

# 「バナナ」がリストの中にあるか探す
if "バナナ" in fruits_list:
    print("バナナは見つかりました!")
else:
    print("リストには入っていません。")

このコードは、Pythonが裏側で「1番目はりんご?違う、2番目はみかん?違う、3番目は…」と順番にチェックしています。データが数個〜数百個程度なら一瞬ですが、これが数万、数十万件という膨大なデータ量になると、探す手間が積み重なり、プログラム全体の動作が目に見えて遅くなってしまいます。

「とりあえずリストを使えばいい」と考えがちですが、データの重複チェックや検索を頻繁に行うシステムを開発する上では、この「検索コスト」がパフォーマンスのボトルネックになることを覚えておきましょう。

2. セットでの高速な重複チェック

2. セットでの高速な重複チェック
2. セットでの高速な重複チェック

セットは順番を持たない代わりに、重複を許さず、要素の存在確認が非常に高速です。内部でハッシュテーブルという構造を使っており、値の検索はほぼ一瞬で終わります。


fruits_set = {"りんご", "みかん", "バナナ", "ぶどう"}
print("バナナ" in fruits_set)  # True

同じデータ量でも、セットを使うとリストよりもはるかに速く存在確認ができます。

3. 実際の速度比較

3. 実際の速度比較
3. 実際の速度比較

簡単な速度比較をしてみましょう。1〜100万までの数字を使って、リストとセットの存在確認にかかる時間を比べます。


import time

data_list = list(range(1_000_000))
data_set = set(range(1_000_000))

# リスト検索
start = time.time()
999_999 in data_list
print("リスト検索時間:", time.time() - start)

# セット検索
start = time.time()
999_999 in data_set
print("セット検索時間:", time.time() - start)

実行すると、セットのほうが圧倒的に速いことがわかります。

4. 重複をなくす用途

4. 重複をなくす用途
4. 重複をなくす用途

セットは重複を自動で取り除く性質があるため、データから重複を削除する場合にも便利です。


fruits_list = ["りんご", "みかん", "バナナ", "りんご"]
unique_fruits = set(fruits_list)
print(unique_fruits)

{'バナナ', 'みかん', 'りんご'}

このように変換するだけで、重複が自動的に消えます。

-

5. 応用例:会員登録の重複チェック

5. 応用例:会員登録の重複チェック
5. 応用例:会員登録の重複チェック

例えば、メールアドレスが既に登録されているか確認する場合、セットを使えば高速に判定できます。


registered_emails = {"user1@example.com", "user2@example.com"}
new_email = "user3@example.com"

if new_email in registered_emails:
    print("すでに登録されています")
else:
    print("登録可能です")

6. 初心者が覚えるべきポイント

6. 初心者が覚えるべきポイント
6. 初心者が覚えるべきポイント
  • リストは順番を持つが、検索は遅くなる場合がある
  • セットは順番を持たないが、検索や重複チェックが高速
  • 内部構造がハッシュテーブルなので検索速度が安定して速い
  • 重複削除や存在確認に特に向いている

Pythonで大量データの重複チェックや検索を行うときは、まずセットを使うことを検討しましょう。

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

関連記事:
カテゴリの一覧へ
新着記事
New1
Python
Pythonの変数スコープとは?初心者でもわかるローカル変数とグローバル変数の違い
New2
Python
PythonのNoneとは?NoneTypeの使い方とnullとの違いをわかりやすく解説
New3
Python
Pythonで文字列の長さを取得する方法!len()の基本と応用
New4
PHP
PHP のインストール方法(Windows・Mac・Linux)と開発環境
-
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonでファイルの更新日やサイズを取得する方法!初心者でもわかるos.stat()の使い方
No.2
Java&Spring記事人気No2
Python
Pythonで文字列が数値か判定する方法!isdigit()・isnumeric()の違い
No.3
Java&Spring記事人気No3
Python
Pythonの書き方を基本から解説!はじめてのPythonプログラム
No.4
Java&Spring記事人気No4
PHP
PHPでREST APIを作る方法を完全ガイド!初心者でもわかるAPI開発入門
No.5
Java&Spring記事人気No5
PHP
初心者向けにPHP でファイルを開く・読み込む・書き込む方法(fopen, fwrite, fread)を解説する記事
No.6
Java&Spring記事人気No6
PHP
PHP のインストール方法(Windows・Mac・Linux)と開発環境
No.7
Java&Spring記事人気No7
Python
Pythonのコンストラクタ(__init__)の使い方を解説!初心者でもわかるオブジェクトの初期化
No.8
Java&Spring記事人気No8
PHP
PHP の可変変数と変数の参照渡しを完全解説!初心者でも理解できる動的変数の使い方
-
-