set

报告问题 查看源代码 每夜 build · 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

实验性。此 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

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)

如果此集合与另一个集合没有任何共同元素,则返回 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 必需
集合、序列或字典。

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 必需
集、序列或字典。