Chatpter.1 - セット型とは
セット型 (set) とは
リストや辞書と同じようなデータ構造をしています。
見た目はリストに、性質は辞書に似ています。
-
こんな書き方をします。
nums = {1, 2, 3, 4, 5}
titles = {'セットの花嫁', 'セット会の一存', '怪盗セットテール'}
{ } で囲います。辞書と同じです。
-
空のセットを作る場合はこう書きます。
set_blank = set()
set()
← 空のセットはこの様に表示されるset_blank = {}
と書くと辞書型になってしまうので注意!
-
順序の保持: リストは要素の順序を保持しますが、セットは要素の順序を
保証しません。インデックスの利用: リストは要素に対してインデックスを使用して
アクセスできますが、セットは順序がないため、インデックスを用いた
アクセスができません。重複する要素: リストは同じ要素を複数回持つことができますが、
セットは重複を許容しません。セット内の要素は一意である必要があります。可変性: リストは可変(mutable)であり、要素の追加、変更、削除が可能です。
一方で、セットも可変ですが、一度作成したセット内の要素は変更できません。
セットに新しい要素を追加することはできます。リテラル表現の違い: リストは角括弧 [] を使用して表現されますが、
セットは波括弧 {} を使用します。
リストとセットの相違点
< ChatGPT の回答を一部加筆修正 >
- リストの [ ] が { } になる。
- 見た目はリストに似ています。
- 辞書のキーにあたるものが、
セットの値になる。 - 辞書のキーと同じく、セットの値も重複を絶対に許しません。絶対にだ。
キーが無いので添字も無く、要素に特殊な方法でアクセスして利用します。 - 辞書のキーと同じように、
セットの値も変更できない。 - 不変(イミュータブル)の型を使う必要があります。
-
セットの使いどころの1つとして手短に言うと、
「順序を必要としない」「重複する値は不要。1つあればいい」 こういうリストを作ろうとしたら、そこは代わってセットの出番です。
セットの特徴をまとめると、
※
現在の Python3 では、値の順序がある程度整列されて表示されます。
セット型には順序が無いので、ソートされているわけではありません。
ちょっと見やすくしてくれているだけです。・・・イイ!😸
-
既に存在する値を追加するとこうなります。
nums = {1, 2, 3, 4, 5} nums.add(1) # セットは.add() で追加 print(nums)
{1, 2, 3, 4, 5}
慣れる為にも自分で打ち込んでみよう!
何も変化がありません。
値の重複を許さないので無視されたのです。ひどい...。 -
重複する値があるセットは、こうなります。
nums = {1, 2, 3, 4, 5, 3, 2} print(nums)
{1, 2, 3, 4, 5}
慣れる為にも自分で打ち込んでみよう!
やはり値が一意にまとめられてしまいました。
-
重複する値があるリストをセットにすると、こうなります。
nums = [1, 2, 3, 4, 5, 3, 2] set_nums = set(nums) # set() を使ってセットに変換 print(set_nums)
{1, 2, 3, 4, 5}
慣れる為にも自分で打ち込んでみよう!
これもやはり値が一意にまとめられてしまいました。
まとめられちゃダメみたいな言い方しましたけど、この特性を活かした使い途があるからこそ存在する機能なのです。
それはもう無限の可能性を秘めたすごい機能です。