set

問題を報告する ソースを表示 ナイトリー 8.1 · 8.0 · 7.5 · 7.4 · 7.3 · 7.2

組み込みのセットタイプ。セットは、一意の値(セットの要素)の変更可能な反復可能なコレクションです。セットの型名"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"

セットの等式または不等式の比較には、==!= を使用します。st と等しいのは、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 のすべての可変値と同様に、セットはフリーズできます。フリーズすると、その後の更新を試みるすべてのオペレーションは失敗します。

メンバー

追加

None set.add(element)

要素をセットに追加します。

セットにすでに存在する値を add することは許可されています。この場合、セットは変更されません。

複数の要素をセットに追加する必要がある場合は、update または |= 拡張代入演算をご覧ください。

パラメータ

パラメータ 説明
element 必須
追加する要素。

クリア

None set.clear()

セットのすべての要素を削除します。

set set.difference(*others)

このセットと他のセットの差分を含む新しい変更可能なセットを返します。

st がセットの場合、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)

他のセットに存在する要素をこのセットから削除します。

st がセットの場合、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)

このセットと他のセットの交差を含む新しい変更可能なセットを返します。

st がセットの場合、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)

他のセットにない要素をこのセットから削除します。

st がセットの場合、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)

このセットに別のセットと共通する要素がない場合、true を返します。

次に例を示します。

set([1, 2]).isdisjoint([3, 4])  # True
set().isdisjoint(set())         # True
set([1, 2]).isdisjoint([2, 3])  # False

パラメータ

パラメータ 説明
other 必須
ハッシュ可能要素のセット、シーケンス、または辞書。

issubset

bool set.issubset(other)

このセットが別のセットのサブセットである場合は true を返します。

セットは常に自身のサブセットと見なされます。

次に例を示します。

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)

このセットが別のセットのスーパーセットである場合は true を返します。

セットは常に自身のスーパーセットと見なされます。

次に例を示します。

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)

このセットと別のセット、シーケンス、辞書の差分を含む新しい変更可能なセットを返します。

st がセットの場合、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)

このセットと別のセット、シーケンス、辞書の差分を含む新しい変更可能なセットを返します。

st がセットの場合、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)

このセットと他のセットのユニオンを含む新しい変更可能なセットを返します。

st がセットの場合、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])

st がセットの場合、s.update(t)s |= t と同等です。ただし、|= 拡張代入では両側がセットである必要がありますが、update メソッドはシーケンスと辞書も受け入れます。

引数なしで update を呼び出すことができます。この場合、セットは変更されません。

パラメータ

パラメータ 説明
others 必須
Set、ハッシュ可能要素のシーケンス、または辞書。