实验性。此 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]
集合 s
等于 t
当且仅当 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])
成员
- add
- clear
- 差异
- difference_update
- 舍弃
- 交叉
- intersection_update
- isdisjoint
- issubset
- issuperset
- pop
- 移除
- symmetric_difference
- symmetric_difference_update
- 联合
- update
add
None
set.add(element)
参数
参数 | 说明 |
---|---|
element
|
必需 要添加的元素。 |
清除
None
set.clear()
差异
set set.difference(*others)
例如:
set([1, 2, 3]).intersection([1, 2], [2, 3]) == set([2])
参数
参数 | 说明 |
---|---|
others
|
必需 集、序列或字典。 |
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
|
必需 集、序列或字典。 |
舍弃
None
set.discard(element)
参数
参数 | 说明 |
---|---|
element
|
必需 要舍弃的元素。 |
交集
set set.intersection(*others)
例如:
set([1, 2, 3]).intersection([1, 2], [2, 3]) == set([2])
参数
参数 | 说明 |
---|---|
others
|
必需 集、序列或字典。 |
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
|
必需 集、序列或字典。 |
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
|
必需 集合、序列或字典。 |
pop
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
|
必需 集合、序列或字典。 |
symmetric_difference_update
None
set.symmetric_difference_update(other)
例如:
set([1, 2, 3]).symmetric_difference([2, 3, 4]) == set([1, 4])
参数
参数 | 说明 |
---|---|
other
|
必需 集合、序列或字典。 |
并集
set set.union(*others)
例如:
set([1, 2]).union([2, 3, 4], [4, 5]) == set([1, 2, 3, 4, 5])
参数
参数 | 说明 |
---|---|
others
|
必需 集、序列或字典。 |
update
None
set.update(*others)
例如:
x = set([1, 2]) x.update([2, 3], [3, 4]) # x is now set([1, 2, 3, 4])
参数
参数 | 说明 |
---|---|
others
|
必需 集、序列或字典。 |