Experimental。這個 API 仍在實驗階段,可能隨時變更。請勿依賴這項功能。您可以設定 --experimental_enable_starlark_set
,將其啟用為實驗功能。
內建可變動的集合類型。範例集合運算式:
x = set() # x is an empty set y = set([1, 2, 3]) # y is a set with 3 elements 3 in y # True 0 in y # False len(x) # 0 len(y) # 3
在布林值情境中使用的集合,只有在非空時才會設為 true。
s = set() "non-empty" if s else "empty" # "empty" t = set(["x", "y"]) "non-empty" if t else "empty" # "non-empty"
集合的元素必須可進行雜湊運算;只有在 x
可用於字典的鍵時,x
才可做為集合的元素。
集合本身無法進行雜湊運算,因此您無法讓集合以另一個集合做為元素。
您無法依索引存取集合的元素,但可以對其進行疊代,並使用 list()
內建函式,依疊代順序取得集合元素的清單。就像清單一樣,在疊代時變異集合也是錯誤。迭代順序與插入順序相符:
s = set([3, 1, 3]) s.add(2) # prints 3, 1, 2 for item in s: print(item) list(s) # [3, 1, 2]
只有當 t
是包含相同元素的集合 (可能具有不同的疊代順序) 時,集合 s
才等於 t
。具體來說,集合 not
等同於其元素清單。
集合並未排序;<
、<=
、>
和 >=
運算並未針對集合定義,且無法為集合清單排序,這與 Python 不同。
對兩個集合執行 |
運算會傳回兩個集合的並集:包含在原始集合中找到的元素的集合。|
運算有擴充指派版本;s |= t
會將 t
的所有元素新增至 s
。
set([1, 2]) | set([3, 2]) # set([1, 2, 3]) s = set([1, 2]) s |= set([2, 3, 4]) # s now equals set([1, 2, 3, 4])
對兩個集合執行 &
運算會傳回兩個集合的交集:一個集合,只包含在兩個原始集合中找到的元素。&
運算有擴充指派版本;s &= t
會從 s
移除 t
中找不到的所有元素。
set([1, 2]) & set([2, 3]) # set([2]) set([1, 2]) & set([3, 4]) # set() s = set([1, 2]) s &= set([0, 1]) # s now equals set([1])
對兩個集合執行 -
運算會傳回兩個集合的差異:包含左側集合中元素,但不包含右側集合元素的集合。-
運算有擴充指派版本;s -= t
會從 s
移除 t
中找到的所有元素。
set([1, 2]) - set([2, 3]) # set([1]) set([1, 2]) - set([3, 4]) # set([1, 2]) s = set([1, 2]) s -= set([0, 1]) # s now equals set([2])
對兩個集合執行 ^
運算會傳回兩個集合的對稱差異:包含兩個原始集合中任一集合中找到的元素,但兩個集合中都沒有。^
作業有擴充指派版本;s ^= t
會從 s
移除 s
中找到的任何 t
元素,並將 s
中找不到的任何 t
元素新增至 s
。
set([1, 2]) ^ set([2, 3]) # set([1, 3]) set([1, 2]) ^ set([3, 4]) # set([1, 2, 3, 4]) s = set([1, 2]) s ^= set([0, 1]) # s now equals set([2, 0])
成員
- 新增
- clear
- 差異
- difference_update
- discard
- 交集
- intersection_update
- isdisjoint
- issubset
- issuperset
- pop
- 移除
- symmetric_difference
- symmetric_difference_update
- union
- 更新
add
None
set.add(element)
參數
參數 | 說明 |
---|---|
element
|
required 要新增的元素。 |
關閉
None
set.clear()
差異
set set.difference(*others)
例如:
set([1, 2, 3]).intersection([1, 2], [2, 3]) == set([2])
參數
參數 | 說明 |
---|---|
others
|
必要 Set、序列或字典。 |
difference_update
None
set.difference_update(*others)
例如:
x = set([1, 2, 3, 4]) x.difference_update([2, 3], [3, 4]) # x is now set([1])
參數
參數 | 說明 |
---|---|
others
|
必要 Set、序列或字典。 |
捨棄
None
set.discard(element)
參數
參數 | 說明 |
---|---|
element
|
必要 要捨棄的元素。 |
交集
set set.intersection(*others)
例如:
set([1, 2, 3]).intersection([1, 2], [2, 3]) == set([2])
參數
參數 | 說明 |
---|---|
others
|
必要 Set、序列或字典。 |
intersection_update
None
set.intersection_update(*others)
例如:
x = set([1, 2, 3, 4]) x.intersection_update([2, 3], [3, 4]) # x is now set([3])
參數
參數 | 說明 |
---|---|
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
|
必要 Set、序列或字典。 |
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
|
必要 Set、序列或字典。 |
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
|
必要 Set、序列或字典。 |
流行
unknown set.pop()
移除
None
set.remove(element)
參數
參數 | 說明 |
---|---|
element
|
必填 要移除的元素。 |
symmetric_difference
set set.symmetric_difference(other)
例如:
set([1, 2, 3]).symmetric_difference([2, 3, 4]) == set([1, 4])
參數
參數 | 說明 |
---|---|
other
|
必要 Set、序列或字典。 |
symmetric_difference_update
None
set.symmetric_difference_update(other)
例如:
set([1, 2, 3]).symmetric_difference([2, 3, 4]) == set([1, 4])
參數
參數 | 說明 |
---|---|
other
|
必要 Set、序列或字典。 |
聯集
set set.union(*others)
例如:
set([1, 2]).union([2, 3, 4], [4, 5]) == set([1, 2, 3, 4, 5])
參數
參數 | 說明 |
---|---|
others
|
必要 Set、序列或字典。 |
update
None
set.update(*others)
例如:
x = set([1, 2]) x.update([2, 3], [3, 4]) # x is now set([1, 2, 3, 4])
參數
參數 | 說明 |
---|---|
others
|
必要 Set、序列或字典。 |