第一章 数据结构 -- 集合

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


第一章 数据结构 – 集合

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 & zs.and(z)s 和 z的交集
z & ss.rand(z)反向 & 操作
s.intersection(it , ...)把可迭代的 it 和其他所有参数转化为集合,然后求它们与 s 的交集
s &= zs.iand_(z)把s更新为 s 和 z 的交集
s.intersection_update(it , ...)把可迭代的 it 和其他所有参数转化为集合,然后求得它们与 s 的交集,然后把 s 更新成这个交集
S ∪ Z s | zs.or(z)s 和 z的并集
z | ss.ror(z)| 的反向操作
s.union(it , ...)把可迭代的 it 和其他所有参数转化为集合,然后求它们与 s 的并集
s |= zs.ior_(z)把s更新为 s 和 z 的并集
s.update(it , ...)把可迭代的 it 和其他所有参数转化为集合,然后求得它们与 s 的并集,然后把 s 更新成这个并集
S \ Z s - zs.sub(z)s 和 z的差集,或者叫作相对补集
z - ss.rsub(z)- 的反向操作
s.difference(it , ...)把可迭代的 it 和其他所有参数转化为集合,然后求它们与 s 的差集
s -= zs.isub_(z)把s更新为 s 和 z 的差集
s.difference_update(it , ...)把可迭代的 it 和其他所有参数转化为集合,然后求得它们与 s 的差集,然后把 s 更新成这个差集
s.symmetric_difference(it)求 s 和 set(it) 的对称差集
S △ Z s ^ zs.xor(z)s 和 z的对称差集
z ^ ss.rxor(z)^ 的反向操作
s.symmetric_difference_update(it , ...)把可迭代的 it 和其他所有参数转化为集合,然后求它们与 s 的对称差集,最后把 s 更新成该结果
s ^= zs.ixor_(z)把s更新为 s 和 z 的对称差集

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值