【廖雪峰python入門ノート】set


1. set dictの役割はkeyのセットとvalueのセットのマッピング関係を確立することであり、dictのkeyは繰り返すことができない.
ある时、私达はdictのkeyだけが欲しくて、keyの対応するvalueに関心がなくて、 はこの集合の要素が重複しないことを保证して、この时、setは役に立ちました.
setは一連の要素を持っています.これはlistに似ていますが、setの要素は で、 で、dictのkeyに似ています.
setを作成する方法は、set()を呼び出し、listを入力します.リストの要素はsetの要素として使用されます.
s = set(['A', 'B', 'C'])

setの内容を表示できます.
>>> print s
set(['A', 'C', 'B'])

上記の印刷形式はlistに似ていますが、listではありません.よく見ると、set内部に格納されている要素が無秩序であるため、印刷の順序と元のlistの順序が異なる可能性があります.
setには重複する要素は含まれないので、重複する要素を含むlistを入力するとどうなりますか?
>>> s = set(['A', 'B', 'C', 'C'])
>>> print s
set(['A', 'C', 'B'])
>>> len(s)
3

その結果、setは で、元のlistには4つの要素がありますが、setには3つの要素しかありません.
2.setへのアクセス
setは を格納しているので、 を介してアクセスできません.
setの要素にアクセスすると、実際には の要素がsetにあるかどうかがわかります.
例えば、クラスの同級生の名前のsetを格納します.
s = set(['Adam', 'Lisa', 'Bart', 'Paul'])

inオペレータで判断できます.
Bartはこのクラスの同級生ですか.
>>> 'Bart' in s
True

ビルはこのクラスの同級生ですか.
>>> 'Bill' in s
False

バートはこのクラスの同級生ですか.
>>> 'bart' in s
False
が重要であるように見え、「Bart」と「bart」は2つの異なる要素とされている.
3.setの特徴
setの内部構造はdictに似ており、唯一の はvalueを格納していないため、1つの要素がsetの中で速度が速いかどうかを判断する.
setに格納される要素はdictのkeyと同様であり、 でなければならないため、任意の可変オブジェクトはsetに入れられない.
最後に、setが格納する要素も である.
setのこれらの特徴は、どこに応用できますか?
月曜日から日曜日まで文字列「MON」、「TUE」、…「SUN」で表すことができます.
月曜日から日曜日までのある日をユーザーに入力させるとしますが、ユーザーの入力が有効な週であるかどうかをどのように判断しますか?
if文で判断できますが、これは非常に煩雑です.
x = '???' #         
if x!= 'MON' and x!= 'TUE' and x!= 'WED' ... and x!= 'SUN':
    print 'input error'
else:
    print 'input ok'

注意:if文の...は、他の週の名前がリストされていないことを示します.テスト時に、完全に入力してください.
セットを事前に作成しておけば、「MON」~「SUN」:
weekdays = set(['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN'])

入力が有効かどうかを判断するには、その文字列がsetにあるかどうかを判断するだけです.
x = '???' #         
if x in weekdays:
    print 'input ok'
else:
    print 'input error'

これでコードが簡単になります
3.遍歴set
setも であるため、ループsetはループリストと同様にforループによって実現することができる.
forループを直接使用するとsetの要素を巡回できます.
>>> s = set(['Adam', 'Lisa', 'Bart'])
>>> for name in s:
        print name
Lisa
Adam
Bart
: forループがsetを遍歴すると、要素の順序とlistの順序が異なる可能性が高く、異なるマシンで実行された結果も異なる可能性があることを観察した.
4.リストの更新
setは 要素のセットを格納しているため、setを更新するには主に2つのことをします.
1つは新しい要素 をsetに、2つは既存の要素をsetから にする.
要素を追加する場合は、setのadd()メソッドを使用します.
>>> s = set([1, 2, 3])
>>> s.add(4)
>>> print s
set([1, 2, 3, 4])

追加された要素 setの場合、add()はエラーを報告しませんが、追加されません.
>>> s = set([1, 2, 3])
>>> s.add(3)
>>> print s
set([1, 2, 3])
setの中の元素の時、setのremove()の方法を使います:
>>> s = set([1, 2, 3, 4])
>>> s.remove(4)
>>> print s
set([1, 2, 3])

削除された要素 setの場合、remove()はエラーを報告します.
>>> s = set([1, 2, 3])
>>> s.remove(4)
Traceback (most recent call last):
  File "", line 1, in 
KeyError: 4
はadd()で直接追加できますが、remove()の前に判断する必要があります.