• Xでシェア
  • LINEでシェア
  • このエントリーをはてなブックマークに追加

Python setの使い方

この記事のポイント

  • 重複を許さない集合データ構造としての基本的な特徴と操作方法
  • 和集合・積集合・差集合などの集合演算を活用した効率的な処理
  • 実際の開発で役立つ重複除去やメンバーシップ検査の実用例

目次

setとは?

setは、重複を許さない要素の集合を表現する可変(mutable)なデータ構造です。

数学の集合概念をプログラミングに適用したもので、同じ要素を複数回追加しても一つしか保存されません。この特徴により、データの重複除去や集合演算を効率的に実行できます。

setは波括弧で囲んで作成し、要素はカンマで区切って指定します。リストとは異なり、要素に順序がなく、インデックスによるアクセスはできません。しかし、メンバーシップ検査(要素の存在確認)は非常に高速で、大量のデータから特定の要素を検索する際に威力を発揮します。和集合、積集合、差集合などの集合演算により、複数のデータセット間の関係を簡潔に表現できます。データ分析、重複除去、グループ分けなど、さまざまな場面で活用される重要な機能です。

【関連】
Pythonをもっと詳しく学ぶならpaizaラーニング

基本構文

setの基本的な構文は、波括弧を使って要素を囲むか、set()関数を使って作成します。

空のsetを作成する場合は必ずset()を使用し、{}だけでは辞書になってしまいます。要素の追加にはadd()メソッド、削除にはremove()やdiscard()メソッドを使用します。また、集合演算には専用の演算子やメソッドが用意されており、直感的な操作が可能です。以下に基本的な使用例を示します。

最も基本的なsetの作成と要素操作の例です。動物の名前を格納したsetを作成し、基本的な操作を実行します。

# 基本的なset作成と操作 animals = {"イヌ", "ネコ", "ウサギ", "ハムスター"} print(f"動物のset: {animals}") print(f"要素数: {len(animals)}") print(f"ネコが含まれる: {'ネコ' in animals}")

出力結果:

動物のset: {'ハムスター', 'ネコ', 'イヌ', 'ウサギ'}
要素数: 4
ネコが含まれる: True

重複要素を含むリストからsetを作成する例です。自動的に重複が除去され、ユニークな要素のみが保持されます。

# 重複除去の例 duplicate_animals = ["イヌ", "ネコ", "イヌ", "ウサギ", "ネコ"] unique_animals = set(duplicate_animals) print(f"元のリスト: {duplicate_animals}") print(f"重複除去後: {unique_animals}")

出力結果:

元のリスト: ['イヌ', 'ネコ', 'イヌ', 'ウサギ', 'ネコ']
重複除去後: {'ウサギ', 'ネコ', 'イヌ'}

実用例

ここからは、setの実用的な使用例を複数のサンプルコードで紹介します。実際の開発現場でよく使われるパターンや、setの集合演算機能を活かした効率的なデータ処理方法を学習できます。

各コード例では、動物をテーマにしたデータを使用して、親しみやすく理解しやすい内容となっています。setの特性を活かした実用的なプログラミング技術を通じて、重複除去、データ比較、効率的な検索処理などのスキルを身につけることができます。これらの例を参考に、自身のプログラミング作業においてsetを効果的に活用してください。

基本的なset作成と要素操作

setの基本的な作成方法と要素の追加・削除操作を学習します。動物の集合を管理し、動的に要素を変更する処理を例に実装します。

zoo_animals = {"ライオン", "トラ", "ゾウ"} zoo_animals.add("キリン") zoo_animals.add("ライオン") # 重複は追加されない zoo_animals.remove("トラ") print(f"動物園の動物: {zoo_animals}") print(f"動物の数: {len(zoo_animals)}")

出力結果:

動物園の動物: {'キリン', 'ゾウ', 'ライオン'}
動物の数: 3

重複データの除去処理

リストに含まれる重複データを効率的に除去する処理の例です。動物の名前リストから重複を除去し、元の順序を保持する方法も示します。

animal_list = ["パンダ", "コアラ", "パンダ", "カンガルー", "コアラ"] unique_animals = list(set(animal_list)) print(f"元のリスト: {animal_list}") print(f"重複除去後: {unique_animals}") # 順序を保持して重複除去 ordered_unique = list(dict.fromkeys(animal_list)) print(f"順序保持版: {ordered_unique}")

出力結果:

元のリスト: ['パンダ', 'コアラ', 'パンダ', 'カンガルー', 'コアラ']
重複除去後: ['コアラ', 'カンガルー', 'パンダ']
順序保持版: ['パンダ', 'コアラ', 'カンガルー']

集合演算での共通要素検索

二つのsetの積集合を求めて、共通する要素を効率的に検索する処理の例です。異なる動物園の共通動物を調べます。

zoo_a = {"ライオン", "トラ", "ゾウ", "キリン"} zoo_b = {"トラ", "ゾウ", "サル", "パンダ"} common_animals = zoo_a & zoo_b print(f"動物園A: {zoo_a}") print(f"動物園B: {zoo_b}") print(f"共通する動物: {common_animals}")

出力結果:

動物園A: {'トラ', 'ライオン', 'ゾウ', 'キリン'}
動物園B: {'トラ', 'ゾウ', 'パンダ', 'サル'}
共通する動物: {'トラ', 'ゾウ'}

差集合を使った要素の比較

差集合を使って二つのsetの違いを効率的に比較する処理の例です。一方にだけ存在する要素を特定します。

pets_yesterday = {"イヌ", "ネコ", "ウサギ", "ハムスター"} pets_today = {"イヌ", "ネコ", "インコ", "キンギョ"} gone_pets = pets_yesterday - pets_today new_pets = pets_today - pets_yesterday print(f"昨日のペット: {pets_yesterday}") print(f"今日のペット: {pets_today}") print(f"いなくなったペット: {gone_pets}") print(f"新しいペット: {new_pets}")

出力結果:

昨日のペット: {'ウサギ', 'イヌ', 'ハムスター', 'ネコ'}
今日のペット: {'イヌ', 'インコ', 'ネコ', 'キンギョ'}
いなくなったペット: {'ハムスター', 'ウサギ'}
新しいペット: {'インコ', 'キンギョ'}

メンバーシップ検査での効率的な検索

setの高速なメンバーシップ検査を活用した効率的な検索処理の例です。大量のデータから特定の要素を素早く検索します。

large_animal_set = {"ライオン", "トラ", "ゾウ", "キリン", "サイ"} search_animals = ["ライオン", "クマ", "ゾウ", "ウサギ"] for animal in search_animals: if animal in large_animal_set: print(f"{animal}は大型動物です") else: print(f"{animal}は大型動物ではありません")

出力結果:

ライオンは大型動物です
クマは大型動物ではありません
ゾウは大型動物です
ウサギは大型動物ではありません

動的な要素追加と削除

setに対して動的に要素を追加・削除する処理の例です。条件に応じて集合の内容を変更し、安全な削除処理を実装します。

current_animals = {"イヌ", "ネコ", "ウサギ"} new_animals = ["ハムスター", "インコ", "ネコ"] for animal in new_animals: current_animals.add(animal) print(f"追加後: {current_animals}") # 安全な削除(discardを使用) current_animals.discard("キンギョ") # 存在しなくてもエラーにならない current_animals.discard("ウサギ") print(f"削除後: {current_animals}")

出力結果:

追加後: {'イヌ', 'ウサギ', 'インコ', 'ネコ', 'ハムスター'}
削除後: {'イヌ', 'インコ', 'ネコ', 'ハムスター'}

複数リストの統合処理

複数のリストを統合し、重複を除去して一つのsetにまとめる処理の例です。異なるソースからのデータを効率的に統合します。

forest_animals = ["クマ", "シカ", "ウサギ", "リス"] farm_animals = ["ウシ", "ウマ", "ブタ", "ニワトリ"] pet_animals = ["イヌ", "ネコ", "ウサギ", "ハムスター"] all_animals = set(forest_animals + farm_animals + pet_animals) print(f"森の動物: {forest_animals}") print(f"農場の動物: {farm_animals}") print(f"ペット: {pet_animals}") print(f"全ての動物: {all_animals}")

出力結果:

森の動物: ['クマ', 'シカ', 'ウサギ', 'リス']
農場の動物: ['ウシ', 'ウマ', 'ブタ', 'ニワトリ']
ペット: ['イヌ', 'ネコ', 'ウサギ', 'ハムスター']
全ての動物: {'シカ', 'イヌ', 'ウシ', 'クマ', 'ニワトリ', 'ウサギ', 'リス', 'ハムスター', 'ブタ', 'ネコ', 'ウマ'}

補足

「全ての動物」の出力結果は実行ごとに異なります。これは、setが値を「順番」ではなく、「どこに保存するか」を重視して管理しているためです。具体的には、各値に対して「ハッシュ値」と呼ばれる番号を計算し、ハッシュ値を使って保存場所を決める仕組みになっています。

さらにPythonでは、セキュリティの観点から、このハッシュ値の計算に毎回異なるランダムな要素(シード値)を加えています。その結果、実行ごとに保存順が変わり、表示される順番も毎回異なります。

データフィルタリングでの活用

setを使ってデータをフィルタリングし、特定の条件を満たす要素のみを抽出する処理の例です。許可された動物のリストを基準にフィルタリングします。

all_animals = ["ライオン", "イヌ", "ネコ", "トラ", "ウサギ", "ゾウ"] allowed_pets = {"イヌ", "ネコ", "ウサギ", "ハムスター", "インコ"} filtered_animals = [animal for animal in all_animals if animal in allowed_pets] wild_animals = [animal for animal in all_animals if animal not in allowed_pets] print(f"全ての動物: {all_animals}") print(f"ペット可能: {filtered_animals}") print(f"野生動物: {wild_animals}")

出力結果:

全ての動物: ['ライオン', 'イヌ', 'ネコ', 'トラ', 'ウサギ', 'ゾウ']
ペット可能: ['イヌ', 'ネコ','ウサギ'] 
野生動物: ['ライオン', 'トラ', 'ゾウ']

まとめ

setは、重複を許さない集合データ構造として、データの重複除去や集合演算を効率的に実行できる重要な機能です。

和集合、積集合、差集合などの集合演算により、複数のデータセット間の関係を簡潔に表現できます。メンバーシップ検査の高速性を活かした効率的な検索処理や、動的な要素管理も可能です。リストとは異なる特性を理解し、適切な場面でsetを活用することで、より効率的で保守性の高いプログラムを作成できます。

これらの知識を活用して、実際の開発においてsetを効果的に活用してください。

レベルを更に上げたい方はpaizaプログラミングスキルチェックへ

  1. paizaラーニングトップ
  2. リファレンス
  3. Pythonのリファレンス記事一覧
  4. Python setの使い方