集合(1)

集合は
値を放り出してキーだけを残した辞書のようなもの。
また、集合は、何かがあるかどうかだけわかればよく、ほかの
ことは知らなくてもよいときに使う。キーになんらかの情報を
値として追加したい場合には、辞書を使う
set()による作成
[]を使えば空リストが作れるので、{}を使えば空集合を作れるような
気がするかもしれないが、実際には{}で作られるのは空辞書です。
なぜか?、辞書の方が先にPythonにふくまれており、波かっこを
自分の物にしているからです。
>>> empty_set = set()
>>> empty_set
set()
>>> even_number = {0, 2, 4, 6, 8}
set()によるほかのデータ型から集合への変換
リスト、文字列、タプル、辞書から重複する値を取り除けば集合を
作ることができる
◎まず一部の文字が複数回登場する文字列から
>>> set( 'letters' )
{'l', 'e', 't', 'r', 's'}
◎リストから
>>> set(['Dasher', 'Dancer', 'Prancer', 'Mason=Dixon'])
{'Dancer', 'Dasher', 'Prancer', 'Mason=Dixon'}
◎タプルから集合を作る
>>> set(('Ummagumma', 'Echoes', 'Atom Heart Mother'))
{'Ummagumma', 'Atom Heart Mother', 'Echoes'}
◎set()に辞書を渡すと、キーだけが使われる。
>>> set({'apple': 'red', 'orange': 'orange', 'cherry': 'red'})
{'apple', 'cherry', 'orange'}
inを使った値の有無のテスト
集合の用途として最も一般的なのがこれです。drinkという辞書を作る。
キーはカクテルの名前、値はその材料だ
>>> drinks = {
'martini': {'vodka', 'vermouth'}
'black russian': {'vodka', 'kahlua'}
'white russian': {'cream', 'kahlua', 'vodka'}
'manhattan': {'rye', 'vermouth', 'bitters'}
'screwdriver': {'orenge juice', 'vodka'}
}
◎どのカクテルにウオッカは入っているのだろうか?
>>> for name, contents in drinks.items():
if 'vodka' in contents:
print(name)
screwdriver
martini
black russian
white russian
◎ウオッカは飲みたいが、クリームはいや、ベルモットもいや?
>>> for name, contents in drinks.items():
if 'vodka' in contents and not('vermouth' in contents or 'cream' in contents):
print(name)
screwdriver
black russian