python基础梳理(八)容器类型之“特殊的字典” set和frozenset

一、基础概念:
说到集合,上过小学的人都知道数学中集合这个概念,本文所讲的集合和数学中的集合有点相同的性质:确定性、互异性、无序性等

1、集合
集合是一种可变的容器,我们可以修改容器中的内容
集合内的数据对象都是唯一的,不能有重复出现
集合是无序的存储结构,集合中的数据没有先后顺序关系
集合内的元素必须是不可变对象(如字符串、元组等)
集合是可迭代对象
集合是相当于没有键值的字典(键值就是集合value,不区分)
2.
创建空的集合
set ()
创建非空的集合
s = {1,2,3,4,5}
在这里插入图片描述
注意:空的集合用set()来表示,s = {}表示一个空的字典,s ={1,2,3,4}表示一个非空的集合。所以当大括号没有内容表示为空字典,有内容但不是键值对表示是集合。
集合的构造函数:
s = set( ) #构造一个空的集合
s = set(iterable) #构建一个非空的集合

示例:
在这里插入图片描述
这里需要说明的,由于集合的唯一性,所以hello生成set后是h l o e 只有一个l
在这里插入图片描述
二、集合的运算
交集:& 并集 :| 补集: - 子集: < 超集:>
运算符:& | - ^ < <= > >= == !=
^:生成俩个集合的对称补集
小于:判断一个集合是另外一个集合的子集
大于:判断一个集合包含另外一个集合
没有+ *等运算,提到的五种运算和数学中的运算规则一致。
在这里插入图片描述
在这里插入图片描述
in/not in运算符:
等同于字典中的,都是来检测元素是否在容器中,唯一不同的是set中key == value
在这里插入图片描述
set的in运算比序列快得多,原因也是散列存储的。和dict一样,只不过是key和value不区分罢了。

三、集合的内建函数以及方法
1.内建函数
max(s)
min(s)
len(s)
any(s)
all(s)
意义和作用和之前dict一致,这里就不再赘述。
2.常用的方法
s.add(e):将元素e插入到集合s中,当然前提是元素e是不可变对象.如果元素已经存在则什么也不做。
在这里插入图片描述
s.remove(e):将元素e从集合中删除,如果这个元素不存在,则产生一个KeyErr
在这里插入图片描述
s.discard(e):从集合中移除一个元素e
在这里插入图片描述
s.clear():清空集合s中的所有元素
在这里插入图片描述
s.copy():进行一次浅拷贝
在这里插入图片描述
s.pop():从集合s中随机移除一个元素;如果集合为空。则引发一个KeyErro的错误
在这里插入图片描述
s.update(s2):用s与s2的全集来覆盖掉原来的s
在这里插入图片描述
以下内容可以用运算符操作代替

  S .difference(s2) :          S -s2

  S.difference update(s2):S = S^s2

  S.intersection(s2):          S&s2

  S. intersection _update(s2):S = S&s2

  S. isdisjoint(s2) :如果s2和S的交集为空返回True,否则返回False

  S.issubset(s2):如果s2和S的交集非空返回True,否则返回False

四、“带上枷锁”的集合 -----固定集合 frozenset

固定集合:是不可变的,无序的,元素不可重复的集合,实际上就是不能修改的集合

作用:固定集合可以作为字典的键值,因为它不变可以进行hash,还可以作为集合的值

创建空的固定集合:
fs = frozenset()
创建非空的固定集合:
frozenset(iterable):用可迭代对象创建新的固定集合

示例:
在这里插入图片描述
关于frozenset的方法:help(frozenset)
除去会修改的集合的方法,其他set的方法都适用,只要不修改就行。
因为frozenset是不可修改的,而set是可以修改的。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/KingOfMyHeart/article/details/88818185
今日推荐