【Python】レッスン4-14:集合の定義と基本操作を理解しよう

記事内に商品プロモーションを含む場合があります

この記事で学べる知識:集合の定義と基本操作

この記事の練習問題で使用する知識:
レッスン1~3の知識リストの定義と要素追加リストの要素削除リストの情報出力リストの集計・並べ替えリストのスライスリストのループ処理リストの内包表記タプルの定義と基本操作タプルのアンパックとネスト辞書の定義と基本操作辞書のループ処理辞書の内包表記集合の定義と基本操作

<<前の問題 問題集Top 次の問題>>

Pythonの「集合の定義と基本操作」とは

この章ではPythonにおける「集合の定義と基本操作」の意味や使い方を学習します。必要ない方はここをクリックして練習問題へ飛びましょう。



Pythonの集合(セット)は要素が重複しないデータの集まりを扱うためのデータ型です。

集合の基本的な定義方法や操作方法を理解することで、効率的なデータ処理が可能になります。今回は集合の基本操作に加えて、和集合、積集合、差集合についても解説します。

集合(セット)とは?

集合(セット)とは、重複する要素を持たず、要素の順序も保証されないデータの集まりです。

リストやタプルと異なり、同じ値を複数回追加しようとしても自動的に1つにまとめられるのが特徴です。

たとえばリストでは [1, 2, 2, 3] とすると重複が許されますが、セットでは {1, 2, 3} として扱われます。

集合の作成と基本操作

集合は波括弧 {} を使って作成します(空のセットを作成する場合はset() 関数を使用します。)。

リストやタプルをセットに変換することも可能です。

セットの基本操作

  • 追加: set.add(要素) で集合に要素を追加できます。
  • 削除: set.remove(要素) で集合から特定の要素を削除します。要素が存在しない場合はエラーになりますが、discard() を使うと存在しなくてもエラーは発生しません。
# セットの作成と要素の追加
fruits = {'りんご', 'バナナ', 'みかん'}
fruits.add('ぶどう')
print(fruits)  # {'りんご', 'バナナ', 'みかん', 'ぶどう'}

# 要素の削除
fruits.remove('みかん')
print(fruits)  # {'りんご', 'バナナ', 'ぶどう'}

和集合、積集合、差集合の解説

集合を使うことで複数のデータセットに対して集合演算を行うことができます。

特に、和集合、積集合、差集合は、データの重複や共通点を扱う際に便利です。

  • 和集合: 2つの集合の要素をすべて含む新しい集合を作成します。A | B または A.union(B) で行います。
  • 積集合: 2つの集合に共通する要素だけを含む集合です。A & B または A.intersection(B) で実行します。
  • 差集合: 1つ目の集合には含まれるが、2つ目の集合には含まれない要素を取得します。A - B または A.difference(B) を使用します。
set1 = {'りんご', 'バナナ', 'みかん'}
set2 = {'バナナ', 'ぶどう', 'メロン'}

# 和集合
union_set = set1 | set2
print(f"和集合: {union_set}")  # {'りんご', 'バナナ', 'みかん', 'ぶどう', 'メロン'}

# 積集合
intersection_set = set1 & set2
print(f"積集合: {intersection_set}")  # {'バナナ'}

# 差集合
difference_set = set1 - set2
print(f"差集合: {difference_set}")  # {'りんご', 'みかん'}

まとめ

Pythonの集合(セット)は重複しない要素を扱うために非常に便利なデータ型です。

今回は集合の作成や基本的な操作に加えて、和集合、積集合、差集合といった集合演算も解説しました。

これらの操作を理解することでデータの扱い方がより効率的になります。Pythonの集合を使って、さまざまなデータ処理を試してみましょう!

練習問題4-14:ランダムな数値で集合演算を学習しよう

1から30までの数字の中からランダムに10個選んで、それを3つの集合として定義してください。

さらにそれぞれの集合に対して 和集合積集合差集合 を計算して表示するプログラムを作成しましょう。

この問題の要件

以下の要件に従ってコードを完成させてください。

  1. 1から30までの範囲から、ランダムに10個の数字を選んだ集合を3つ作成すること。
  2. 3つの集合に対して、以下の集合演算を実行すること:
    • 和集合(| 演算子または .union() メソッドを使用)
    • 積集合(& 演算子または .intersection() メソッドを使用)
    • 差集合(- 演算子または .difference() メソッドを使用)
  3. 最終結果を日本語で表示すること。

※差集合は1つ目の集合から2つ目と3つ目の要素を引くこと

ただし、以下のような実行結果となるコードを書くこと。

*****↓↓正解コードの実行結果の例↓↓*****

集合1: {2, 5, 7, 12, 15, 18, 19, 22, 26, 28}
集合2: {3, 7, 9, 12, 14, 16, 19, 24, 28, 30}
集合3: {1, 5, 7, 12, 16, 18, 19, 20, 23, 24}

和集合: {1, 2, 3, 5, 7, 9, 12, 14, 15, 16, 18, 19, 20, 22, 23, 24, 26, 28, 30}
積集合: {7, 12, 19}
差集合: {2, 15, 22, 26}

この問題を解くヒント

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)

1:randomモジュールをインポート
2:random.sampleを使って1から30までの範囲でランダムに10個の数字を選択し、set1を作成
3:random.sampleを使って1から30までの範囲でランダムに10個の数字を選択し、set2を作成
4:random.sampleを使って1から30までの範囲でランダムに10個の数字を選択し、set3を作成
5:集合1の内容を表示
6:集合2の内容を表示
7:集合3の内容を表示
8:和集合を計算して変数union_setに代入
9:積集合を計算して変数intersection_setに代入
10:差集合を計算して変数difference_setに代入
11:和集合の結果を表示
12:積集合の結果を表示
13:差集合の結果を表示

ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

# ランダムな数字の集合を作成し、和集合、積集合、差集合を学ぶためのコード
import random

# 1から30までの数字からランダムに10個の数字を選択して集合を作成

"""【穴埋め問題1】
ここに1から30までの範囲でランダムに10個の数字を選んでset1, set2, set3を作成するコードを書いてください。
"""

# それぞれの集合を表示
print("集合1:", set1)
print("集合2:", set2)
print("集合3:", set3)

# 和集合

"""【穴埋め問題2】
ここに3つの集合の和集合を計算するコードを書いてください。
"""

# 積集合

"""【穴埋め問題3】
ここに3つの集合の積集合を計算するコードを書いてください。
"""

# 差集合

"""【穴埋め問題4】
ここに集合1から集合2と集合3の差集合を計算するコードを書いてください。
"""

# 結果を表示
print("和集合:", union_set)
print("積集合:", intersection_set)
print("差集合:", difference_set)

 

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。



解答例と解説

この問題の一つの正解例とそのコードの解説を以下に示します。

正解コードの例

例えば以下のようなプログラムが考えられます。

# ランダムな数字の集合を作成し、和集合、積集合、差集合を学ぶためのコード
import random

# 1から30までの数字からランダムに10個の数字を選択して集合を作成
set1 = set(random.sample(range(1, 31), 10))
set2 = set(random.sample(range(1, 31), 10))
set3 = set(random.sample(range(1, 31), 10))

# それぞれの集合を表示
print("集合1:", set1)
print("集合2:", set2)
print("集合3:", set3)

# 和集合
union_set = set1 | set2 | set3
# 積集合
intersection_set = set1 & set2 & set3
# 差集合 (集合1から集合2、集合3を差し引く)
difference_set = set1 - set2 - set3

# 結果を表示
print("和集合:", union_set)
print("積集合:", intersection_set)
print("差集合:", difference_set)

正解コードの解説

このプログラムではPythonの 集合(セット) を使って3つの集合を作成し、和集合、積集合、差集合を学びます。

まずコードを各ブロックごとに分解して詳しく説明していきます。

ランダムな数を使った集合の作成

import random
set1 = set(random.sample(range(1, 31), 10))
set2 = set(random.sample(range(1, 31), 10))
set3 = set(random.sample(range(1, 31), 10))

ここではPythonの random.sample() 関数を使って、1から30までの数値の中からランダムに10個の数を選び出し、それを 集合(セット) に変換しています。

このコードでは、set1set2set3という3つの集合を作成しています。

集合の内容を表示

print("集合1:", set1)
print("集合2:", set2)
print("集合3:", set3)

ここでは作成した3つの集合の内容を画面に表示しています。

集合の中の要素は順不同で表示されますが、重複している要素は存在しません。

和集合の計算

union_set = set1 | set2 | set3

和集合 とは2つ以上の集合の要素をすべて含んだ新しい集合です。

このコードでは、set1set2set3のすべての要素を含んだ集合 union_set を作成しています。

積集合の計算

intersection_set = set1 & set2 & set3

積集合 とは複数の集合に共通する要素だけを含む新しい集合です。

このコードでは、set1set2set3に共通する要素だけを持つ intersection_set を作成しています。

差集合の計算

difference_set = set1 - set2 - set3

差集合 とは1つの集合から他の集合に含まれている要素を取り除いた集合です。

このコードでは、set1からset2およびset3の要素を引いた difference_set を作成しています。

結果の表示

print("和集合:", union_set)
print("積集合:", intersection_set)
print("差集合:", difference_set)

最後に計算された和集合、積集合、差集合の結果を画面に表示しています。

これにより各演算の結果が確認できます。

まとめ

このプログラムを通じて集合の基本的な操作である和集合、積集合、差集合を学びました。

集合は上手に使うことで、重複を防ぎながら効率的にデータを管理することができます。ぜひ、他の集合演算も試して、Pythonでの集合操作に慣れていきましょう!

<<前の問題 問題集Top 次の問題>>

この記事への質問・コメント

この記事を作成するにあたりAIを活用しています。

問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。






    Python記事トップへ戻る
    トップページへ戻る