カテゴリ: Python 更新日: 2025/09/04

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

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

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

生徒

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

先生

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

生徒

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

先生

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

生徒

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

-

1. リストでの重複チェックの仕組み

1. リストでの重複チェックの仕組み
1. リストでの重複チェックの仕組み

Pythonのリストは順番を持つデータ型で、重複も許されます。しかし、特定の値が含まれているかを確認するには、最初から最後まで順番に探す必要があります。そのため、データ量が多いと時間がかかります。


fruits_list = ["りんご", "みかん", "バナナ", "ぶどう"]
print("バナナ" in fruits_list)  # True

この方法は小さなデータでは問題ありませんが、数十万件のデータでは速度に差が出ます。

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
PHP
PHP のフォームデータの受け取り($_POST, $_GET)を完全解説!初心者向けガイド
New2
PHP
PHPのスコープとは?グローバル・ローカル・スーパーグローバルを完全解説!
New3
PHP
PHPの演算子をやさしく解説!算術・比較・論理・ビット演算子の使い方
New4
PHP
PHP の変数とは?基本的な使い方とデータ型を徹底解説!
-
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonで辞書のキー・値・アイテムを取得する方法(keys(), values())
No.2
Java&Spring記事人気No2
Python
Pythonで辞書のネスト構造(入れ子辞書)を扱う方法 初心者向け完全ガイド
No.3
Java&Spring記事人気No3
Python
Pythonでエラースタックトレースを表示・取得する方法を徹底解説!初心者向け例外処理入門
No.4
Java&Spring記事人気No4
Python
PythonでMySQLに接続する方法を完全解説!初心者でもわかるpymysqlの基本
No.5
Java&Spring記事人気No5
Python
PythonでExcelファイル(.xlsx)を操作する方法を徹底解説!初心者でもできるopenpyxl・pandasの使い方
No.6
Java&Spring記事人気No6
PHP
PHP の日付と時間の取得(date, time, strtotime)を完全解説!初心者でもわかる使い方
No.7
Java&Spring記事人気No7
PHP
PHPで画像ファイルをアップロードする方法を初心者向けに徹底解説!わかりやすい画像処理入門
No.8
Java&Spring記事人気No8
PHP
PHP のデータ型を完全ガイド!初心者でもわかる int, string, float, bool など
-
-