跟老齐学Python之集合的关系


Posted in Python onSeptember 24, 2014

冻结的集合

前面一节讲述了集合的基本概念,注意,那里所涉及到的集合都是可原处修改的集合。还有一种集合,不能在原处修改。这种集合的创建方法是:

>>> f_set = frozenset("qiwsir")   #看这个名字就知道了frozen,冻结的set
>>> f_set
frozenset(['q', 'i', 's', 'r', 'w'])
>>> f_set.add("python")       #报错
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
AttributeError: 'frozenset' object has no attribute 'add'

>>> a_set = set("github")      #对比看一看,这是一个可以原处修改的set
>>> a_set
set(['b', 'g', 'i', 'h', 'u', 't'])
>>> a_set.add("python")
>>> a_set
set(['b', 'g', 'i', 'h', 'python', 'u', 't'])

集合运算

先复习一下中学数学(准确说是高中数学中的一点知识)中关于集合的一点知识,主要是唤起那痛苦而青涩美丽的回忆吧,至少对我是。

元素与集合的关系

元素是否属于某个集合。

>>> aset
set(['h', 'o', 'n', 'p', 't', 'y'])
>>> "a" in aset
False
>>> "h" in aset
True

集合与集合的纠结

假设两个集合A、B

A是否等于B,即两个集合的元素完全一样
在交互模式下实验

>>> a      
set(['q', 'i', 's', 'r', 'w'])
>>> b
set(['a', 'q', 'i', 'l', 'o'])
>>> a == b
False
>>> a != b
True

A是否是B的子集,或者反过来,B是否是A的超集。即A的元素也都是B的元素,但是B的元素比A的元素数量多。
实验一下

>>> a
set(['q', 'i', 's', 'r', 'w'])
>>> c
set(['q', 'i'])
>>> c<a   #c是a的子集
True
>>> c.issubset(a)  #或者用这种方法,判断c是否是a的子集
True
>>> a.issuperset(c) #判断a是否是c的超集
True

>>> b
set(['a', 'q', 'i', 'l', 'o'])
>>> a<b   #a不是b的子集
False
>>> a.issubset(b)  #或者这样做
False

A、B的并集,即A、B所有元素,如下图所示

跟老齐学Python之集合的关系

>>> a
set(['q', 'i', 's', 'r', 'w'])
>>> b
set(['a', 'q', 'i', 'l', 'o'])
>>> a | b            #可以有两种方式,结果一样
set(['a', 'i', 'l', 'o', 'q', 's', 'r', 'w'])
>>> a.union(b)
set(['a', 'i', 'l', 'o', 'q', 's', 'r', 'w'])

A、B的交集,即A、B所公有的元素,如下图所示

跟老齐学Python之集合的关系

>>> a
set(['q', 'i', 's', 'r', 'w'])
>>> b
set(['a', 'q', 'i', 'l', 'o'])
>>> a & b    #两种方式,等价
set(['q', 'i'])
>>> a.intersection(b)
set(['q', 'i'])

我在实验的时候,顺手敲了下面的代码,出现的结果如下,看官能解释一下吗?(思考题)

>>> a and b
set(['a', 'q', 'i', 'l', 'o'])

A相对B的差(补),即A相对B不同的部分元素,如下图所示

跟老齐学Python之集合的关系

>>> a
set(['q', 'i', 's', 'r', 'w'])
>>> b
set(['a', 'q', 'i', 'l', 'o'])
>>> a - b
set(['s', 'r', 'w'])
>>> a.difference(b)
set(['s', 'r', 'w'])

-A、B的对称差集,如下图所示

跟老齐学Python之集合的关系

>>> a
set(['q', 'i', 's', 'r', 'w'])
>>> b
set(['a', 'q', 'i', 'l', 'o'])
>>> a.symmetric_difference(b)
set(['a', 'l', 'o', 's', 'r', 'w'])

以上是集合的基本运算。在编程中,如果用到,可以用前面说的方法查找。不用死记硬背。

Python 相关文章推荐
python批量生成本地ip地址的方法
Mar 23 Python
Django自定义插件实现网站登录验证码功能
Apr 19 Python
用Python下载一个网页保存为本地的HTML文件实例
May 21 Python
python实现最长公共子序列
May 22 Python
浅谈python实现Google翻译PDF,解决换行的问题
Nov 28 Python
python使用matplotlib画柱状图、散点图
Mar 18 Python
python通过paramiko复制远程文件及文件目录到本地
Apr 30 Python
Python学习笔记之Break和Continue用法分析
Aug 14 Python
python opencv调用笔记本摄像头
Aug 28 Python
详解Python 最短匹配模式
Jul 29 Python
TensorFlow低版本代码自动升级为1.0版本
Feb 20 Python
python神经网络Xception模型
May 06 Python
跟老齐学Python之集合(set)
Sep 24 #Python
跟老齐学Python之有点简约的元组
Sep 24 #Python
跟老齐学Python之dict()的操作方法
Sep 24 #Python
Python单链表的简单实现方法
Sep 23 #Python
Python中bisect的用法
Sep 23 #Python
python元组操作实例解析
Sep 23 #Python
Python中实现两个字典(dict)合并的方法
Sep 23 #Python
You might like
PHP自定义大小验证码的方法详解
2013/06/07 PHP
PHP实现动态web服务器方法
2015/07/29 PHP
PHP执行SQL文件并将SQL文件导入到数据库
2015/09/17 PHP
PHP基于GD库实现的生成图片缩略图函数示例
2017/07/05 PHP
详解提高使用Java反射的效率方法
2019/04/29 PHP
javascript显示隐藏层比较不错的方法分析
2008/09/30 Javascript
javascript 表单的友好用户体现
2009/01/07 Javascript
Mootools 1.2教程 设置和获取样式表属性
2009/09/15 Javascript
EXT中xtype的含义分析
2010/01/07 Javascript
JQuery 弹出框定位实现方法
2010/12/02 Javascript
AngularJS基础 ng-paste 指令简单示例
2016/08/02 Javascript
Vue.js搭建移动端购物车界面
2020/06/28 Javascript
利用10行js代码实现上下滚动公告效果
2017/12/08 Javascript
webpack4 css打包压缩问题的解决
2018/05/18 Javascript
在vue项目中集成graphql(vue-ApolloClient)
2018/09/08 Javascript
JS实现手写 forEach算法示例
2020/04/29 Javascript
element跨分页操作选择详解
2020/06/29 Javascript
[03:36]2015国际邀请赛第二日现场精彩集锦
2015/08/06 DOTA
使用python绘制人人网好友关系图示例
2014/04/01 Python
python使用ctypes模块调用windowsapi获取系统版本示例
2014/04/17 Python
解决tensorflow1.x版本加载saver.restore目录报错的问题
2018/07/26 Python
win10子系统python开发环境准备及kenlm和nltk的使用教程
2019/10/14 Python
Python中求对数方法总结
2020/03/10 Python
Python文件操作基础流程解析
2020/03/19 Python
html5使用canvas绘制太阳系效果
2014/12/15 HTML / CSS
美国批发零售网站:GearXS
2016/07/26 全球购物
大门门卫岗位职责
2013/11/30 职场文书
理工科学生的自我评价
2013/12/15 职场文书
幼儿园家长会欢迎词
2014/01/09 职场文书
共产党员承诺书
2014/03/25 职场文书
2014年学校卫生工作总结
2014/11/20 职场文书
2014年管理人员工作总结
2014/12/01 职场文书
北京故宫导游词
2015/01/31 职场文书
区域经理岗位职责
2015/02/02 职场文书
Python开发工具Pycharm的安装以及使用步骤总结
2021/06/24 Python
MySQL分区表管理命令汇总
2022/03/21 MySQL