「大人の教養・知識・気付き」を伸ばすブログ

一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。目下、データ分析・語学に力点を置いています。

MENU

Pythonをゆっくりていねいに学ぶ(その05/X)

 Pythonを真面目にゆっくり学ぶべく

を参考に学んでいきます*1

3. Pyの具:リスト、タプル、辞書、集合

3.5 集合

 集合は辞書からキーのみを残したようなもので、個々のキーは一意でなければならない。集合は\mathrm{set}()関数もしくは波括弧\{\}で値を囲むことで代入することで生成できる。

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を用いた値の有無テスト

 集合は元を有するかなどを\mathrm{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版が出ているものの初版しか持っていないのでこちらで。

プライバシーポリシー お問い合わせ