【Python】要素が必ず一意になるSet型とは?その特徴とリストや辞書と違う点を紹介

20230924_Python プログラミング言語

要素の重複を省くためSetオブジェクトを使いました.

リストと似たように使ってましたが,リストとは全く異なる概念のデータ型ということを知りました.Set型について調べたのでまとめてみました.

今回は要素の重複ができないSet型について紹介します.

Set型の特徴とは

Set型はこのような特徴があります.

  • Set型であることは{}で表す
  • 要素は重複しない
  • 要素は順番を持たない
  • 要素は変更可能

この特徴を見るとリストや辞書と似た点があったりちょっと混乱しますね.

実際にPythonを使ってSet型の特徴を確認してみましょう!

Set型は{}で表す

Set型のデータは{}中括弧で囲まれています.

training = {'ベンチプレス', 'レッグプレス', 'チェストプレス'}
print(training)
クリックして拡大できます

{}で囲まれていると辞書型と勘違いしそうですよね.

見分けるポイントは

  • 辞書型はキーとバリューで1つの要素になっていること
  • Set型は1つのデータしか要素をとれないこと

{}を使っているのは同じですが要素の形が違うので見分けれそうですね!

training_set = {'ベンチプレス', 'レッグプレス', 'チェストプレス'}
print(training_set) # Set型

training_dic = {
  'ベンチプレス': 60,
  'レッグプレス': 90,
  'チェストプレス': 45
}
print(training_dic) # dic型
クリックして拡大できます

要素は重複しない

リストは同じ要素を持てましたが,Setは持てません.
複数同じ要素があるときにSetを定義すると要素は一意に絞られます

training_list = ['ベンチプレス', 'レッグプレス', 'チェストプレス', 'チェストプレス']
print(training_list) # リスト型

training_set = {'ベンチプレス', 'レッグプレス', 'チェストプレス', 'チェストプレス'}
print(training_set) # Set型

リストはチェストプレスが重複して入っていますが,Setは一意になっていますね.

要素を重複させたくないときはSetを使うと良いでしょう!

要素は順番を持たない

リストの要素は順番を持つためインデックス指定ができましたが,Setは順番を持たないためインデックス指定できません.

training_list = ['ベンチプレス', 'レッグプレス', 'チェストプレス', 'チェストプレス']
print(training_list[0]) # リスト型

training_set = {'ベンチプレス', 'レッグプレス', 'チェストプレス', 'チェストプレス'}
print(training_set[0]) # Set型
クリックして拡大できます

要素は変更可能

Set型は要素の追加や削除ができます.

この点はリストに似ていてタプルとは対照的ですね.

training_set = {'ベンチプレス', 'レッグプレス', 'チェストプレス', 'チェストプレス'}

training_set.add('ショルダープレス')
print(training_set) # {'ベンチプレス', 'レッグプレス', 'チェストプレス', 'ショルダープレス'}

training_set.remove('ベンチプレス')
print(training_set) # {'レッグプレス', 'チェストプレス', 'ショルダープレス'}
クリックして拡大できます

Set型を使った型変換について

Set関数を使うとリストや辞書,タプルをSet型に型変換ができます.

クリックして拡大できます
# 辞書からSetへ型変換する
training_dict = {
  'ベンチプレス': 60,
  'レッグプレス': 90,
  'チェストプレス': 45
}
print(set(training_dict))

# リストからSetへ型変換する
training_list = ['ベンチプレス', 'レッグプレス', 'チェストプレス', 'チェストプレス']
print(set(training_list))

# タプルからSetへ型変換する
training_taple = ('ベンチプレス', 'レッグプレス', 'チェストプレス', 'チェストプレス')
print(training_taple)

型変換するとそれぞれ違いがありますね.

辞書からSetへ型変換するとキーだけ表示されました.
キーとバリューでまとまって1つの要素になるかなと思いましたが,そうすると辞書とSetの区別が付かなくなるので妥当な結果ですね.

リストからSetへ型変換すると重複が消えました.
リストは要素の重複ができますがSetはできないので一意になりました.

タプルからSetへ型変換すると同様に重複が消えました.
タプルは要素の追加・削除ができないイミュータブルな型ですが,Setに変えることで追加・削除ができるようになりました.

まとめ

今回はSet型の特徴について紹介しました.

要素が一意になるくらいしか知らなかったので勉強になりました.
リストや辞書,タプルとまた違った特徴を持っているのでSetを使えると表現範囲が広がりますね.

これらの特徴を覚えていれば最低限Setを使えるでしょう.

  • Set型であることは{}で表す
  • 要素は重複しない
  • 要素は順番を持たない
  • 要素は変更可能
組み込み型
以下のセクションでは、インタプリタに組み込まれている標準型について記述します。 主要な組み込み型は、数値、シーケンス、マッピング、クラス、インスタンス、および例外です。 コレクションクラスには、ミュータブルなものがあります。コレクションのメンバをインプレースに足し、引き、または並べ替えて、特定の要素を返さないメソッドは...