組み込みのセットタイプ。セットは、一意の値(セットの要素)の変更可能な反復可能なコレクションです。セットの型名は "set"
です。
セットでは、値の挿入、削除、存在確認を一定時間で実行できます。セットはハッシュテーブルを使用して実装されるため、ディクショナリのキーと同様に、セットの要素はハッシュ可能である必要があります。値は、辞書のキーとして使用できる場合にのみ、セットの要素として使用できます。
セットは、組み込み関数 set()
を使用して作成できます。この関数は、オプションの引数の一意の要素を含む新しいセットを返します。この引数はイテラブルでなければなりません。引数なしで set()
を呼び出すと、空のセットが作成されます。セットにはリテラル構文がありません。
in
オペレーションと not in
オペレーションは、値がセットに含まれているかどうかを確認します。
s = set(["a", "b", "c"]) "a" in s # True "z" in s # False
セットは反復可能であるため、for
ループ、リスト コンプリヘンション、反復可能オブジェクトを操作するさまざまな組み込み関数のオペランドとして使用できます。長さは len()
組み込み関数を使用して取得できます。反復処理の順序は、要素が最初にセットに追加された順序です。
s = set(["z", "y", "z", "y"]) len(s) # prints 2 s.add("x") len(s) # prints 3 for e in s: print e # prints "z", "y", "x"
ブール値コンテキストで使用されるセットは、空でない場合のみ true です。
s = set() "non-empty" if s else "empty" # "empty" t = set(["x", "y"]) "non-empty" if t else "empty" # "non-empty"
セットの等式または不等式の比較には、==
と !=
を使用します。s
が t
と等しいのは、t
が同じ要素を含むセットである場合のみです。反復の順序は重要ではありません。特に、セットは要素のリストと等しくありません。セットは他のセットに対して順序付けられません。<
、<=
、>
、>=
を使用して 2 つのセットを比較したり、セットのシーケンスを並べ替えたりしようとすると、失敗します。
set() == set() # True set() != [] # True set([1, 2]) == set([2, 1]) # True set([1, 2]) != [1, 2] # True
2 つのセットに対する |
オペレーションは、2 つのセットの結合を返します。これは、元のセットの一つまたは両方にある要素を含むセットです。
set([1, 2]) | set([3, 2]) # set([1, 2, 3])
2 つのセットに対する &
演算は、2 つのセットの共通部分を返します。これは、元の両方のセットに存在する要素のみを含むセットです。
set([1, 2]) & set([2, 3]) # set([2]) set([1, 2]) & set([3, 4]) # set()
2 つのセットに対する -
演算は、2 つのセットの差を返します。これは、左側のセットにはあるが右側のセットにはない要素を含むセットです。
set([1, 2]) - set([2, 3]) # set([1]) set([1, 2]) - set([3, 4]) # set([1, 2])
2 つのセットに対する ^
演算は、2 つのセットの対称差を返します。これは、2 つの元のセットのうち 1 つにのみ存在し、両方に存在しない要素を含むセットです。
set([1, 2]) ^ set([2, 3]) # set([1, 3]) set([1, 2]) ^ set([3, 4]) # set([1, 2, 3, 4])
上記の各演算で、結果セットの要素は 2 つのオペランド セットの順序を保持し、左側から取得されたすべての要素が、右側にのみ存在する要素の前に並べられます。
対応する拡張代入(|=
、&=
、-=
、^=
)は、左側のセットをその場で変更します。
s = set([1, 2]) s |= set([2, 3, 4]) # s now equals set([1, 2, 3, 4]) s &= set([0, 1, 2, 3]) # s now equals set([1, 2, 3]) s -= set([0, 1]) # s now equals set([2, 3]) s ^= set([3, 4]) # s now equals set([2, 4])
Starlark のすべての可変値と同様に、セットはフリーズできます。フリーズすると、その後の更新を試みるすべてのオペレーションは失敗します。
メンバー
- 追加
- クリア
- 差異
- difference_update
- 破棄
- 交差点
- intersection_update
- isdisjoint
- issubset
- issuperset
- pop
- 削除
- symmetric_difference
- symmetric_difference_update
- union
- update
追加
None
set.add(element)
セットにすでに存在する値を add
することは許可されています。この場合、セットは変更されません。
複数の要素をセットに追加する必要がある場合は、update
または |=
拡張代入演算をご覧ください。
パラメータ
パラメータ | 説明 |
---|---|
element
|
必須 追加する要素。 |
クリア
None
set.clear()
差
set set.difference(*others)
s
と t
がセットの場合、s.difference(t)
は s - t
と同等です。ただし、-
オペレーションでは両側がセットである必要がありますが、difference
メソッドはシーケンスと辞書も受け入れます。
引数なしで difference
を呼び出すことができます。この場合、セットのコピーが返されます。
次に例を示します。
set([1, 2, 3]).difference([2]) # set([1, 3]) set([1, 2, 3]).difference([0, 1], [3, 4]) # set([2])
パラメータ
パラメータ | 説明 |
---|---|
others
|
必須 Set、ハッシュ可能要素のシーケンス、または辞書。 |
difference_update
None
set.difference_update(*others)
s
と t
がセットの場合、s.difference_update(t)
は s -= t
と同等です。ただし、-=
拡張代入では両側がセットである必要がありますが、difference_update
メソッドはシーケンスと辞書も受け入れます。
引数なしで difference_update
を呼び出すことができます。この場合、セットは変更されません。
次に例を示します。
s = set([1, 2, 3, 4]) s.difference_update([2]) # None; s is set([1, 3, 4]) s.difference_update([0, 1], [4, 5]) # None; s is set([3])
パラメータ
パラメータ | 説明 |
---|---|
others
|
必須 Set、ハッシュ可能要素のシーケンス、または辞書。 |
破棄
None
set.discard(element)
セットに存在しない値を discard
にすることは許可されています。この場合、セットは変更されません。存在しない要素の削除を試行して失敗する場合は、代わりに remove
を使用します。セットから複数の要素を削除する必要がある場合は、difference_update
または -=
拡張代入オペレーションをご覧ください。
次に例を示します。
s = set(["x", "y"]) s.discard("y") # None; s == set(["x"]) s.discard("y") # None; s == set(["x"])
パラメータ
パラメータ | 説明 |
---|---|
element
|
必須 破棄する要素。ハッシュ可能である必要があります。 |
共通集合
set set.intersection(*others)
s
と t
がセットの場合、s.intersection(t)
は s & t
と同等です。ただし、&
オペレーションでは両側がセットである必要がありますが、intersection
メソッドではシーケンスと辞書も使用できます。
引数なしで intersection
を呼び出すことができます。この場合、セットのコピーが返されます。
次に例を示します。
set([1, 2]).intersection([2, 3]) # set([2]) set([1, 2, 3]).intersection([0, 1], [1, 2]) # set([1])
パラメータ
パラメータ | 説明 |
---|---|
others
|
必須 Set、ハッシュ可能要素のシーケンス、または辞書。 |
intersection_update
None
set.intersection_update(*others)
s
と t
がセットの場合、s.intersection_update(t)
は s &= t
と同等です。ただし、&=
拡張代入では両辺がセットである必要がありますが、intersection_update
メソッドはシーケンスと辞書も受け入れます。
引数なしで intersection_update
を呼び出すことができます。この場合、セットは変更されません。
次に例を示します。
s = set([1, 2, 3, 4]) s.intersection_update([0, 1, 2]) # None; s is set([1, 2]) s.intersection_update([0, 1], [1, 2]) # None; s is set([1])
パラメータ
パラメータ | 説明 |
---|---|
others
|
必須 Set、ハッシュ可能要素のシーケンス、または辞書。 |
isdisjoint
bool set.isdisjoint(other)
次に例を示します。
set([1, 2]).isdisjoint([3, 4]) # True set().isdisjoint(set()) # True set([1, 2]).isdisjoint([2, 3]) # False
パラメータ
パラメータ | 説明 |
---|---|
other
|
必須 ハッシュ可能要素のセット、シーケンス、または辞書。 |
issubset
bool set.issubset(other)
セットは常に自身のサブセットと見なされます。
次に例を示します。
set([1, 2]).issubset([1, 2, 3]) # True set([1, 2]).issubset([1, 2]) # True set([1, 2]).issubset([2, 3]) # False
パラメータ
パラメータ | 説明 |
---|---|
other
|
必須 ハッシュ可能要素のセット、シーケンス、または辞書。 |
issuperset
bool set.issuperset(other)
セットは常に自身のスーパーセットと見なされます。
次に例を示します。
set([1, 2, 3]).issuperset([1, 2]) # True set([1, 2, 3]).issuperset([1, 2, 3]) # True set([1, 2, 3]).issuperset([2, 3, 4]) # False
パラメータ
パラメータ | 説明 |
---|---|
other
|
必須 ハッシュ可能要素のセット、シーケンス、または辞書。 |
ポップ
unknown set.pop()
セットが空の場合、失敗します。
次に例を示します。
s = set([3, 1, 2]) s.pop() # 3; s == set([1, 2]) s.pop() # 1; s == set([2]) s.pop() # 2; s == set() s.pop() # error: empty set
削除
None
set.remove(element)
要素がセットに存在しない場合、remove
は失敗します。存在しない要素の削除を試行して失敗したくない場合は、代わりに discard
を使用します。セットから複数の要素を削除する必要がある場合は、difference_update
または -=
拡張代入オペレーションをご覧ください。
パラメータ
パラメータ | 説明 |
---|---|
element
|
必須 削除する要素。セットの要素(ハッシュ可能)である必要があります。 |
symmetric_difference
set set.symmetric_difference(other)
s
と t
がセットの場合、s.symmetric_difference(t)
は s ^ t
と同等です。ただし、^
オペレーションでは両側がセットである必要がありますが、symmetric_difference
メソッドはシーケンスまたは辞書も受け入れます。
次に例を示します。
set([1, 2]).symmetric_difference([2, 3]) # set([1, 3])
パラメータ
パラメータ | 説明 |
---|---|
other
|
必須 ハッシュ可能要素のセット、シーケンス、または辞書。 |
symmetric_difference_update
None
set.symmetric_difference_update(other)
s
と t
がセットの場合、s.symmetric_difference_update(t)
は「s ^= t; however, note that the
^=」と同等です。拡張代入では両側がセットである必要がありますが、symmetric_difference_update
メソッドはシーケンスまたは辞書も受け入れます。
次に例を示します。
s = set([1, 2]) s.symmetric_difference_update([2, 3]) # None; s == set([1, 3])
パラメータ
パラメータ | 説明 |
---|---|
other
|
必須 ハッシュ可能要素のセット、シーケンス、または辞書。 |
ユニオン
set set.union(*others)
s
と t
がセットの場合、s.union(t)
は s | t
と同等です。ただし、|
オペレーションでは両側がセットである必要がありますが、union
メソッドはシーケンスと辞書も受け入れます。
引数なしで union
を呼び出すことができます。この場合、セットのコピーが返されます。
次に例を示します。
set([1, 2]).union([2, 3]) # set([1, 2, 3]) set([1, 2]).union([2, 3], {3: "a", 4: "b"}) # set([1, 2, 3, 4])
パラメータ
パラメータ | 説明 |
---|---|
others
|
必須 Set、ハッシュ可能要素のシーケンス、または辞書。 |
update
None
set.update(*others)
次に例を示します。
s = set() s.update([1, 2]) # None; s is set([1, 2]) s.update([2, 3], [3, 4]) # None; s is set([1, 2, 3, 4])
s
と t
がセットの場合、s.update(t)
は s |= t
と同等です。ただし、|=
拡張代入では両側がセットである必要がありますが、update
メソッドはシーケンスと辞書も受け入れます。
引数なしで update
を呼び出すことができます。この場合、セットは変更されません。
パラメータ
パラメータ | 説明 |
---|---|
others
|
必須 Set、ハッシュ可能要素のシーケンス、または辞書。 |