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版が出ているものの初版しか持っていないのでこちらで。
