集合 (set) は辞書のキーだけを取り出したリストのようなものです.リストとの最も大きな違いは同じ要素を複数持てないことです.
集合を生成するには複数の要素をコンマで区切って全体を { }
で囲います.次の例では有名な小説(源氏物語(紫式部),坊っちゃん(夏目漱石),走れメロス(太宰治),羅生門(芥川龍之介))の集合を生成します.なお,集合の要素に順序はないことにも注意してください.
novels = {"genji", "bocchan", "meros", "rashomon"}
print(novels)
{'bocchan', 'genji', 'meros', 'rashomon'}
オブジェクトの型を確認しておきます.
type(novels)
set
また,set()
を使って集合を生成することもできます.このとき,引数を与えなければ空の集合が生成されます.
empty_names = set()
print(empty_names)
set()
これについてもオブジェクトの型を確認します.
type(empty_names)
set
リストから set()
によって集合に変換することもできます.このとき,リストでは同じ要素を複数持つことができますが,集合ではできないことに注意が必要です.つまり,リストから重複を除いた集合を生成することが可能です.例えば,次のように 'Watanabe'
が3回登場するリスト all_names
から集合 names
を生成すると,重複を除いた集合を生成できます.
all_names = ['Tanaka', 'Sato', 'Watanabe', 'Takahashi', 'Watanabe', 'Watabe', 'Tanabe', 'Watanabe']
names = set(all_names)
print(names)
{'Tanaka', 'Tanabe', 'Watabe', 'Sato', 'Takahashi', 'Watanabe'}
このとき,sorted()
でソートすることで並べ替えた集合を得ることもできます.何れにせよ,'Watanabe'
の重複が除かれていることに注意してください.
all_names = ['Tanaka', 'Sato', 'Watanabe', 'Takahashi', 'Watanabe', 'Watabe', 'Tanabe', 'Watanabe']
names = sorted(set(all_names))
print(names)
['Sato', 'Takahashi', 'Tanabe', 'Tanaka', 'Watabe', 'Watanabe']
集合に要素を追加するには add()
を使います.例えば novels
に
'gakumon'
(学問ノススメ(福沢諭吉))を追加します.
print(novels)
novels.add('gakumon')
print(novels)
{'bocchan', 'genji', 'meros', 'rashomon'} {'bocchan', 'genji', 'meros', 'rashomon', 'gakumon'}
すでにある要素 'genji'
を add しても追加されませんが,エラーや警告が表示されることもありません.
novels.add('genji')
print(novels)
{'bocchan', 'genji', 'meros', 'rashomon', 'gakumon'}
要素を削除するには remove()
を使います.
novels.remove('gakumon')
print(novels)
{'bocchan', 'genji', 'meros', 'rashomon'}