ゆずまの○○日記がシンプルでいいと思います!

プログラミングを中心に書いていこうと思ってます。

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が他の部分集合かどうかを調べることができる。
    • A ⊆ B を Pythonでは、 A <= B とかける。
    • A ⊇ B を Pythonでは、 A >= B とかける。

集合の参考イメージ

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[ ]: