02_set(集合)を使う
- setは、集合を扱うために、Pythonに追加されました。
- 複数の要素を持つデータの種類のこと
- リストと同じように複数の要素を保存することができる。
- リストと違い、中の要素が重複しないように管理される。
- 存在する値を登録しようとしても、新しい要素が追加されない。
- インデックスを使って、要素を取り出すことができない。
- 和集合
- 複数のsetを足したsetを作る
- |演算子を使う
- 差集合
- あるsetに含まれる要素を他のsetから取り除く
- -演算子を使う
- 交わり
- 共通する要素だけを抜き出す
- &演算子を使う
- 対象差 ( XOR のような操作)
- あるsetと他のsetを合わせて、2つのsetが共通して持つ要素だけを取り除く
- ^演算子を使う
- 集合演算
- 和集合、差集合、交わり、対象差を集合演算と呼ぶ。
- setを定義する
- {要素, 要素, 要素}
- リストやディクショナリを要素として追加することはできない。
- 変更できると重複した要素を持たないという性質を保てないため。
- TypeError: unhashable type:“list"のようなエラーが発生する
- setの集合演算では、ビット演算や、論理演算で使う演算子が利用されている。
- setはfor文にシーケンスとして添えることができる。
- リストからsetを作ることができる
- 組み込み関数set()を使う。
- リストと同じように、len(),max(),min(), sum()を使える
- リストと同じように、in演算子を使って、要素の検索をすることができる。
- if文の中で、<=を使うと、あるsetが他の部分集合かどうかを調べることができる。
集合の参考イメージ
http://suugaku-bukai.esnet.ed.jp/2008/study/2004/20040202.htm
# coding: utf-8 # In[3]: # setの定義 dice = { 1,2, 3, 4, 5, 6 } coin = {"表", "裏"} print(dice) print(coin) # In[4]: ### 和集合を得る ### # 素数のsetを定義する prime = {2, 3, 5, 7, 13, 17} # フィボナッチ数のsetを定義する fib = {1, 1, 2, 3, 5, 8, 13} prime_fib = prime | fib prime_fib # In[5]: ### 差集合を得る ### # サイコロの目のsetを定義 dice = { 1, 2, 3, 4, 5, 6} # 偶数のsetを定義する even = { 2, 4, 6, 8, 10} odd_dice = dice - even odd_dice # In[6]: ### setの交わりを得る ### prefs = {"北海道", "青森", "秋田", "岩手"} capitals = {"札幌" , "青森", "秋田", "盛岡"} pref_cap = prefs & capitals pref_cap # In[8]: ### setの交わりを得る ### prefs = {"北海道", "青森", "秋田", "岩手"} capitals = {"札幌" , "青森", "秋田", "盛岡"} pref_cap2 = prefs ^ capitals pref_cap2 # In[10]: ### リストをsetに変換する ### # リストを定義する codon = ['ATG', 'GCC', 'TCC', 'AAG', 'TTC', 'TGG', 'GAC', 'TCC'] # リストをsetに変換する s_codon = set(codon) print(len(codon), len(s_codon)) print(s_codon) # In[12]: ### 要素の検索とsetの比較 ### prime = {2, 3, 5, 7, 13, 17} fib = {1, 1, 2, 3, 5, 8, 13} prime_fib = prime & fib print(prime_fib) if 13 in prime_fib: print("13は素数で、フィボナッチ数でもある") if {2, 3} <= prime_fib: print("2,3は素数で、フィボナッチ数でもある") # In[ ]: