第一章 数据结构 -- 集合

第零章 学前准备
第一章 数据结构 – 基本数据类型
第一章 数据结构 – 字符串
第一章 数据结构 – 列表、元组和切片
第一章 数据结构 – 字典
第一章 数据结构 – 集合


第一章 数据结构 – 集合

1.2 组合数据类型

1.2.6 集合

集合有两个实现类:可变 set 和不可变 frozenset

集合的本质是许多唯一对象的聚集。因此,集合拥有去重的功能。集合中的元素必须是可散列的, set 类型本身是不可散列的,但是 frozenset 可以。

1.2.6.1 定义和初始化
# 1", "空集
from unicodedata import name
test_set = set()
print(test_set)
# 2", "集合的字面量
test_set = {
    
    1, 2, 3}
print(test_set)
# 3", "通过可迭代对象
test_set = set([1, 2, 3, 4])
print(test_set)
# 4", "集合推导setcomps
{
    
    chr(i) for i in range(32, 256) if 'SIGN' in name(chr(i), '')}
1.2.6.2 集合的操作
1.2.6.2.1 集合的数学运算
表 3-1 集合的数学运算
数学符号 Python运算符 方法 描述
S ∩ Z s & z s.and(z) s 和 z的交集
z & s s.rand(z) 反向 & 操作
s.intersection(it , ...) 把可迭代的 it 和其他所有参数转化为集合,然后求它们与 s 的交集
s &= z s.iand_(z) 把s更新为 s 和 z 的交集
s.intersection_update(it , ...) 把可迭代的 it 和其他所有参数转化为集合,然后求得它们与 s 的交集,然后把 s 更新成这个交集
S ∪ Z s | z s.or(z) s 和 z的并集
z | s s.ror(z) | 的反向操作
s.union(it , ...) 把可迭代的 it 和其他所有参数转化为集合,然后求它们与 s 的并集
s |= z s.ior_(z) 把s更新为 s 和 z 的并集
s.update(it , ...) 把可迭代的 it 和其他所有参数转化为集合,然后求得它们与 s 的并集,然后把 s 更新成这个并集
S \ Z s - z s.sub(z) s 和 z的差集,或者叫作相对补集
z - s s.rsub(z) - 的反向操作
s.difference(it , ...) 把可迭代的 it 和其他所有参数转化为集合,然后求它们与 s 的差集
s -= z s.isub_(z) 把s更新为 s 和 z 的差集
s.difference_update(it , ...) 把可迭代的 it 和其他所有参数转化为集合,然后求得它们与 s 的差集,然后把 s 更新成这个差集
s.symmetric_difference(it) 求 s 和 set(it) 的对称差集
S △ Z s ^ z s.xor(z) s 和 z的对称差集
z ^ s s.rxor(z) ^ 的反向操作
s.symmetric_difference_update(it , ...) 把可迭代的 it 和其他所有参数转化为集合,然后求它们与 s 的对称差集,最后把 s 更新成该结果
s ^= z s.ixor_(z) 把s更新为 s 和 z 的对称差集

1.2.6.2.2 集合的比较运算符
表 3-2 集合的比较运算符
数学符号 Python运算符 方法 描述
s.isdisjoint(z) 查看 s 和 z是否不相交(没有共同元素)
e ∈ s e in s s.contains(e) 元素 e 是否属于 s
e ∈ s e in s s.contains(e) 元素 e 是否属于 s
s ⊆ z s <= z s.le(z) s 是否为 z的子集
s.issubset(it) 把可迭代的 it 转化为集合,然后查看 s 是否为它的子集
s ⊂ z s < z s.lt(z) s 是否为 z 的真子集
s ⊇ z s >= z s.ge(z) s 是否为 z 的父集
s.issuperset(it) 把可迭代的it转化为集合,然后查看s是否为它的父集
s ⊃ z s > z s.gt(z) s 是否为 z 的真父集

1.2.6.2.3 集合类型的其它方法。

set无序排序且不重复,是可变的,有add()remove()等方法。既然是可变的,所以它不存在哈希值。基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交集), difference(差集)和sysmmetric difference(对称差集)等数学运算。set支持 x in set, len(set), 和 for x in set

作为一个无序的集合,set不记录元素位置或者插入点。因此,set不支持 indexing, 或其它类序列的操作。

frozenset是冻结的集合,它是不可变的,存在哈希值,好处是它可以作为字典的key,也可以作为其它集合的元素。缺点是一旦创建便不能更改,没有addremove方法。

表 3-3 集合类型的其它方法
Python方法 set froznset 描述
s.add(e) * 把元素 e 添加到 s 中
s.clear() * 移除 s 中所有元素
s.copy() * * 对 s 浅复制
s.discard(e) * 如果 s 中有 e 这个元素的话,将其移除
s.__iter__() * * 返回 s 的迭代器
s.__len__() * * len(s)
s.pop() * * 从s中移除一个元素并返回它的值,若s为空,则抛出KeyError异常
s.remove(e) * 从s中移除e元素,若e元素不存在,则抛出KeyError异常

猜你喜欢

转载自blog.csdn.net/qq_31654025/article/details/132800820