Pythonを真面目にゆっくり学ぶべく
を参考に学んでいきます*1。
3. Pyの具:リスト、タプル、辞書、集合
3.5 集合
集合は辞書からキーのみを残したようなもので、個々のキーは一意でなければならない。集合は関数もしくは波括弧で値を囲むことで代入することで生成できる。
3.5.1 集合の生成
################## ### 集合の定義 ### ################## empty_set = set() print(empty_set) even_numbers = {2,4,6,8} print(even_numbers) odd_numbers = {1,3,5,7,9} print(odd_numbers) # 他の型から集合への変換 print(set('letters')) # 文字列をset()で受けると各文字を1つの要素として見る print(set(['Dasher', 'Dancer', 'Prancer', 'Mason-Dixon'])) # 文字列を要素としたければ、タプルを与える print(set({'apple':'red','banana':'yellow', 'cherry':'red'})) # 辞書はキーのみを用いる
3.5.2 inを用いた値の有無テスト
集合は元を有するかなどをを用いることなどで、様々な方法でテストできる。
drinks = {'martini':{'vodka', 'vermouth'}, 'black russian':{'vodka', 'kahlua'}, 'white russian':{'cream', 'kahlua', 'vodka'}, 'manhattan':{'rye','vermouth','bitters'}, 'screwdriver':{'orange juice', 'vodka'}} print(drinks) print('') print('********************') print('') for name, contents in drinks.items(): if 'vodka' in contents: print(name) print('') print('********************') print('') ### # 要素の組み合わせ:共通部分を取る for name, contents in drinks.items(): if contents & {'vermouth', 'orange juice'}: print(name) print('') for name, contents in drinks.items(): if 'vodka' in contents and not contents & {'vermouth','cream'}: print(name)
また和集合や共通部分も取れる。
a = {1,2} b = {2,4} # 和集合 print(a | b) print(a.union(b)) print('') print('********************') # 共通部分 print(a & b) print(a.intersection(b)) print('') print('********************') # 差集合 print(a - b) print(a.difference(b)) print('') print('********************') # 排他的論理和 print(a^b) print(a.symmetric_difference(b)) print('') print('********************') # 一方がもう一方の部分集合になっているか c = {1,2} d = {1,2,3,4} print(c <= d) # aがbの部分集合か否か print(c.issubset(d)) # 一方がもう一方の真部分集合になっているか print(c < d) # aがbの真部分集合か否か print('') print('********************') ## 一方がもう一方の部分集合になっているか print(d >= c) # aがbの部分集合か否か print(d.issuperset(c)) # 一方がもう一方の真部分集合になっているか print(d > c) # aがbの真部分集合か否か
*1:第2版が出ているものの初版しか持っていないのでこちらで。