frozenset的创建方法为:
frozenset([iterable])
例如:>>> a = frozenset([3,4,5])>>> afrozenset([3, 4, 5])>>> 3 in aTrue>>> 6 in aFalse
>>> a = frozenset((1,'2',7))
>>> a
frozenset([1, '2', 7])
因为frozenset的不变性,其可以作为dictionary的键值及其他set的元素。其运行效率也高于set。
运算符 | equal |
运算结果 |
len(s) |
|
set 的长度 |
x in s |
|
测试 x 是否是 s 的成员 |
x not in s |
|
测试 x 是否不是 s 的成员 |
s.issubset(t) |
s <= t |
测试是否 s 中的每一个元素都在 t 中 |
s.issuperset(t) |
s >= t |
测试是否 t 中的每一个元素都在 s 中 |
s.union(t) |
s | t |
返回一个新的 set 包含 s 和 t 中的每一个元素 |
s.intersection(t) |
s & t |
返回一个新的 set 包含 s 和 t 中的公共元素 |
s.difference(t) |
s - t |
返回一个新的 set 包含 s 中有但是 t 中没有的元素 |
s.symmetric_difference(t) |
s ^ t |
返回一个新的 set 包含 s 和 t 中不重复的元素 |
s.copy() |
|
返回 set “s”的一个浅复制 |
请注意:union(), intersection(), difference() 和 symmetric_difference() 这些非运算符(non-operator,就是形如 s.union()这样的)版本将会接受任何 iterable 作为参数。相反,它们的运算符版本(operator based counterparts)要求参数必须是 sets。这样可以避免潜在的错误,如:为了更可读而使用 set('abc') & set('cbs') 来替代 set('abc').intersection('cbs')。从 2.3.1 版本中做的更改:以前所有参数都必须是 sets。
运算符(voperator) | 等价于 | 运算结果 |
s.update(t) | s |= t | 返回增加了 set “t”中元素后的 set “s” |
s.intersection_update(t) | s &= t | 返回只保留含有 set “t”中元素的 set “s” |
s.difference_update(t) | s -= t | 返回删除了 set “t”中含有的元素后的 set“s” |
s.symmetric_difference_update(t) | s ^= t | 返回含有 set “t”或者 set “s”中有而不是两者都有的元素的 set “s” |
s.add(x) |
| 向 set “s”中增加元素 x |
s.remove(x) |
| 从 set “s”中删除元素 x, 如果不存在则引发KeyError |
s.discard(x) |
| 如果在 set “s”中存在元素 x, 则删除 |
s.pop() |
| 删除并且返回 set “s”中的一个不确定的元素, 如果为空则引发 KeyError |
s.clear() |
| 删除 set “s”中的所有元素 |
请注意:非运算符版本的 update(), intersection_update(), difference_update()和symmetric_difference_update()将会接受任意 iterable 作为参数。从 2.3.1 版本做的更改:以前所有参数都必须是 sets。