Python内置类型集合set和frozenset的使用详解


Posted in Python onApril 26, 2022

简介

集合对象 set 是由具有唯一性的可哈希对象组成的无序多项集,如 list 不能哈希因此,不能作为 set 的一项。

set 的常见用途包括成员检测、从序列中去除重复项以及数学中的集合类计算,如交集、并集、差集与对称差集等。

set 不记录元素位置或插入顺序。 相应地,set 不支持索引、切片或其他序列操作。

目前有两种内置集合类型,set 和 frozenset:

  • set 是可变的,其内容可以通过 add() 和 remove() 来改变。由于是可变类型,所以不可哈希值,则不能作为字典的键或其他集合的元素。
  • frozenset 是不可变的,所以可哈希,因此可以用为字典的键或其他集合的元素。

除了可以使用 set 构造器,非空的 set (不是 frozenset) 还可以通过将以逗号分隔的元素列表包含于花括号之内来创建,例如: {‘jack’, ‘sjoerd’}。

构造

花括号内用逗号分隔

集合推导式

类型构造器

a = {1, 2, 3}  # 花括号内用逗号分隔
b = {i for i in range(4) if i > 0}  # 集合推导式
c = set([1, 2, 3])  # 类型构造器
print(a, type(a))
print(b, type(b))
print(c, type(c))
# {1, 2, 3} <class 'set'>
# {1, 2, 3} <class 'set'>
# {1, 2, 3} <class 'set'>

基本使用

a = {1, 2, 3}
print(len(a))  # 元素数量
print(1 in a)  # 检测成员
print(1 not in a)  # 检测成员
# 3
# True
# False

交集、并集、差集、对称差集

Python内置类型集合set和frozenset的使用详解

A = {1, 2, 3}
B = {3, 4, 5}

print(A.intersection(B))  # 交集
print(A.union(B))  # 并集
print(A.difference(B))  # 差集
print(A.symmetric_difference(B))  # 对称差集
# {3}
# {1, 2, 3, 4, 5}
# {1, 2}
# {1, 2, 4, 5}

无交集、子集、超集

Python内置类型集合set和frozenset的使用详解

  • 与other无交集:isdisjoint(other)
  • 是other的子集:issubset(other),相当于 set <= other
  • 是other的超集:issuperset(other),相当于 set >= other
A = {1, 2, 3}
B = {3, 4, 5}
C = {1, 2, 3, 4, 5, 6}
D = {7, 8, 9}

# 是否无交集
print(A.isdisjoint(A))  # False
print(A.isdisjoint(B))  # False
print(A.isdisjoint(C))  # False
print(A.isdisjoint(D))  # True
print()

# 是否子集
print(A.issubset(A))  # True
print(A.issubset(B))  # False
print(A.issubset(C))  # True
print(A.issubset(D))  # False
print()

# 是否超集
print(C.issuperset(A))  # True
print(C.issuperset(B))  # True
print(C.issuperset(C))  # True
print(C.issuperset(D))  # False

运算符

Python内置类型集合set和frozenset的使用详解

A、B、C 是 C 的子集,C 是 A、B、C 的超集

A、B 是 C 的真子集,C 是 A、B 的真超集

运算符 含义
<= 子集
< 真子集
>= 超集
> 真超集
& 交集
| 并集
- 差集
^ 对称差集
A = {1, 2, 3}
B = {3, 4, 5}
C = {1, 2, 3, 4, 5, 6}
D = {7, 8, 9}

# 子集,相当于issubset(other)
print(A <= C)  # True
print(B <= C)  # True
print(C <= C)  # True
print(D <= C)  # False
print()

# 真子集
print(A < C)  # True
print(B < C)  # True
print(C < C)  # False
print(D < C)  # False
print()

# 超集,相当于issuperset(other)
print(C >= A)  # True
print(C >= B)  # True
print(C >= C)  # True
print(C >= D)  # False
print()

# 真超集
print(C > A)  # True
print(C > B)  # True
print(C > C)  # False
print(C > D)  # False
print()

# 交集,相当于intersection(*other)
print(A & B)  # {3}
print(A.intersection(B))  # {3}

# 并集,相当于union(*other)
print(A | B)  # {1, 2, 3, 4, 5}
print(A.union(B))  # {1, 2, 3, 4, 5}

# 差集,相当于difference(*other)
print(A - B)  # {1, 2}
print(A.difference(B))  # {1, 2}

# 对称差集,相当于symmetric_difference(other)
print(A ^ B)  # {1, 2, 4, 5}
print(A.symmetric_difference(B))  # {1, 2, 4, 5}

可用于 set 的操作

不可用于不可变的 frozenset

操作 含义
add(elem) 添加单个元素
remove(elem) 移除单个元素,如果不存在报错
discard(elem) 移除单个元素,如果存在
pop() 移除并返回任一元素,集合为空报错
clear() 移除所有元素
update(*others)
set |= other
添加元素
difference_update(*others)
set -= other
移除元素
symmetric_difference_update(other)
set ^= other
移除相同元素
A = {1, 2, 3}
A.add(4)  # 添加单个元素
print(A)  # {1, 2, 3, 4}

A = {1, 2, 3}
A.remove(3)  # 移除单个元素,如果不存在报错
print(A)  # {1, 2}

A = {1, 2, 3}
A.discard(3)  # 移除单个元素,如果存在
A.discard(99)  # 移除单个元素,如果存在
print(A)  # {1, 2}

A = {2, 1, 3}
print(A.pop())  # 移除并返回任一元素,集合为空报错

A = {1, 2, 3}
A.clear()  # 移除所有元素
print(A)  # set()
A = {1, 2, 3}
B = {3, 4, 5}
A.update(B)  # 添加元素
# A |= B  # 添加元素
print(A)  # {1, 2, 3, 4, 5}

A = {1, 2, 3}
B = {3, 4, 5}
A.difference_update(B)  # 移除元素
# A -= B  # 移除元素
print(A)  # {1, 2}

A = {1, 2, 3}
B = {3, 4, 5}
A.symmetric_difference_update(B)  # 移除相同元素
# A ^= B  # 移除相同元素
print(A)  # {1, 2, 4, 5}

以上就是Python集合之set和frozenset的使用详解的详细内容!


Tags in this post...

Python 相关文章推荐
python通过pil模块获得图片exif信息的方法
Mar 16 Python
Python中使用第三方库xlrd来写入Excel文件示例
Apr 05 Python
python实现在windows下操作word的方法
Apr 28 Python
利用aardio给python编写图形界面
Aug 21 Python
python 将字符串转换成字典dict的各种方式总结
Mar 23 Python
Python自定义函数实现求两个数最大公约数、最小公倍数示例
May 21 Python
PyQt4实时显示文本内容GUI的示例
Jun 14 Python
Python scrapy增量爬取实例及实现过程解析
Dec 24 Python
python enumerate内置函数用法总结
Jan 07 Python
Python爬虫库BeautifulSoup的介绍与简单使用实例
Jan 25 Python
python安装及变量名介绍详解
Dec 12 Python
python元组拆包实现方法
Feb 28 Python
使用Python获取字典键对应值的方法
Apr 26 #Python
PyTorch中permute的使用方法
Apr 26 #Python
Python matplotlib 利用随机函数生成变化图形
方法汇总:Python 安装第三方库常用
Apr 26 #Python
Python 统计序列中元素的出现频度
Apr 26 #Python
Python matplotlib安装以及实现简单曲线的绘制
Python爬虫 简单介绍一下Xpath及使用
You might like
用文本作数据处理
2006/10/09 PHP
php smarty模版引擎中的缓存应用
2009/12/11 PHP
PhpMyAdmin中无法导入sql文件的解决办法
2010/01/08 PHP
PHP实现提取一个图像文件并在浏览器上显示的代码
2012/10/06 PHP
完美解决令人抓狂的zend studio 7代码提示(content Assist)速度慢的问题
2013/06/20 PHP
javascript学习笔记(七) js函数介绍
2012/06/19 Javascript
解析DHTML,JavaScript,DOM,BOM以及WEB标准的描述
2013/06/19 Javascript
不同Jquery版本引发的问题解决
2013/10/14 Javascript
JavaScript数据类型检测代码分享
2015/01/26 Javascript
深入讲解AngularJS中的自定义指令的使用
2015/06/18 Javascript
javascript实现输出指定行数正方形图案的方法
2015/08/03 Javascript
jquery实现的用户注册表单提示操作效果代码分享
2015/08/28 Javascript
js时间戳转为日期格式的方法
2015/12/28 Javascript
BootStrap中的表单大全
2016/09/07 Javascript
jquery获取easyui日期控件的值实现方法
2016/11/09 Javascript
jquery实现自适应banner焦点图
2017/02/16 Javascript
荐书|您有一份JavaScript书单待签收
2017/07/21 Javascript
JavaScript中为事件指定处理程序的五种方式分析
2018/07/27 Javascript
Vue 配合eiement动态路由,权限验证的方法
2018/09/26 Javascript
js回文数的4种判断方法示例
2019/06/04 Javascript
EasyUI 数据表格datagrid列自适应内容宽度的实现
2019/07/18 Javascript
VUE中V-IF条件判断改变元素的样式操作
2020/08/09 Javascript
js实现限定区域范围拖拉拽效果
2020/11/20 Javascript
vue-calendar-component 封装多日期选择组件的实例代码
2020/12/04 Vue.js
pytorch 在sequential中使用view来reshape的例子
2019/08/20 Python
python使用pymongo与MongoDB基本交互操作示例
2020/04/09 Python
Python pandas对excel的操作实现示例
2020/07/21 Python
python实现学生管理系统开发
2020/07/24 Python
结构工程研究生求职信
2013/10/13 职场文书
公司业务主管岗位职责
2013/12/07 职场文书
成功经营餐厅的创业计划书范文
2013/12/26 职场文书
预备党员的自我评价
2014/03/12 职场文书
机关作风整顿个人剖析材料
2014/10/06 职场文书
手把手教你制定暑期学习计划,让你度过充实的暑假
2019/08/22 职场文书
Python中X[:,0]和X[:,1]的用法
2021/05/10 Python
淡雅古典唯美少女娇媚宁静迷人写真
2022/03/21 杂记