組み込みのセット型。セットは、一意の値(セットの要素)の変更可能な反復可能なコレクションです。セットの型名は "set"
です。
セットは、値の挿入、削除、存在の確認を行う定数時間オペレーションを提供します。セットはハッシュテーブルを使用して実装されるため、辞書のキーと同様に、セットの要素はハッシュ可能である必要があります。値が集合の要素として使用できるのは、辞書のキーとして使用できる場合に限られます。
セットは set()
組み込み関数を使用して構築できます。この関数は、オプションの引数(iterable である必要があります)の一意の要素を含む新しいセットを返します。引数なしで 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 つのセットの共通部分を返します。つまり、元の 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 つのセットのいずれか一方にのみ含まれ、両方には含まれない要素を含むセットです。
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
- difference_update
- 破棄
- intersection
- 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
|
必須 ハッシュ可能な要素のセット、シーケンス、または辞書。 |
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
|
必須 ハッシュ可能な要素のセット、シーケンス、または辞書。 |
破棄
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
|
必須 ハッシュ可能な要素のセット、シーケンス、または辞書。 |
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
|
必須 ハッシュ可能な要素のセット、シーケンス、または辞書。 |
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
|
必須 ハッシュ可能な要素のセット、シーケンス、または辞書。 |
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
|
必須 ハッシュ可能な要素のセット、シーケンス、または辞書。 |