カテゴリ: 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でカウントダウンタイマーを作る方法!初心者向けにやさしく解説
New2
PHP
PHPとは?初心者向けにわかりやすく解説
New3
Python
Pythonの数値型を完全ガイド!整数と浮動小数点数の違いを初心者向けに解説
New4
PHP
PHPのXSS対策を完全ガイド!初心者でもわかる安全なWebアプリの作り方
-
人気記事
No.1
Java&Spring記事人気No1
PHP
初心者向けPHPでMySQLからデータを取得する方法(SELECT文)完全ガイド
No.2
Java&Spring記事人気No2
Python
Pythonでテキストファイルを1行ずつ読み込む方法(readline() / readlines())
No.3
Java&Spring記事人気No3
Python
Pythonで経過時間を測る方法をやさしく解説!初心者向けtime.perf_counterとtime.sleepの使い方
No.4
Java&Spring記事人気No4
Python
PythonでMySQLに接続する方法を完全解説!初心者でもわかるpymysqlの基本
No.5
Java&Spring記事人気No5
Python
Pythonで月の日数を取得する方法!初心者でもわかるcalendar.monthrangeの使い方
No.6
Java&Spring記事人気No6
Python
Pythonで文字列が数値か判定する方法!isdigit()・isnumeric()の違い
No.7
Java&Spring記事人気No7
Python
Pythonの文字列型(str)の使い方!文字列の結合・分割・検索をマスター
No.8
Java&Spring記事人気No8
Python
Pythonで数値を文字列に変換する方法!str()とformat()の使い方
-
-