跟老齐学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程序添加图形化界面的教程
Apr 29 Python
python发送邮件功能实现代码
Jul 15 Python
Python实现基于KNN算法的笔迹识别功能详解
Jul 09 Python
Python实现带参数的用户验证功能装饰器示例
Dec 14 Python
python实现五子棋游戏
Jun 18 Python
python and or用法详解
Jun 26 Python
python异步实现定时任务和周期任务的方法
Jun 29 Python
Python queue队列原理与应用案例分析
Sep 27 Python
PyTorch的SoftMax交叉熵损失和梯度用法
Jan 15 Python
Python正则表达式学习小例子
Mar 03 Python
Python 字符串池化的前提
Jul 03 Python
浅析Python 责任链设计模式
Sep 11 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 第二节 数据类型之转换
2012/04/28 PHP
php检测数组长度函数sizeof与count用法
2014/11/17 PHP
PHP获取数组长度或某个值出现次数的方法
2015/02/11 PHP
thinkphp5框架路由原理与用法详解
2020/02/11 PHP
ExtJS PropertyGrid中使用Combobox选择值问题
2010/06/13 Javascript
IE下JS读取xml文件示例代码
2013/08/05 Javascript
常见表单重复提交问题整理及解决方法
2013/11/13 Javascript
jQuery动态修改超链接地址的方法
2015/02/13 Javascript
jQuery抛物线运动实现方法(附完整demo源码下载)
2016/01/08 Javascript
jQuery height()、innerHeight()、outerHeight()函数的区别详解
2016/05/23 Javascript
angularjs实现文字上下无缝滚动特效代码
2016/09/04 Javascript
jQuery实现可拖拽的许愿墙效果【附demo源码下载】
2016/09/14 Javascript
javascript的document中的动态添加标签实现方法
2016/10/24 Javascript
关于vue.js v-bind 的一些理解和思考
2017/06/06 Javascript
vue填坑之webpack run build 静态资源找不到的解决方法
2018/09/03 Javascript
VUE接入腾讯验证码功能(滑块验证)备忘
2019/05/07 Javascript
从0到1搭建element后台框架优化篇(打包优化)
2019/05/12 Javascript
浅谈JavaScript中你可能不知道URL构造函数的属性
2020/07/13 Javascript
[04:28]2014DOTA2国际邀请赛 采访小兔子LGD挺进钥匙体育馆
2014/07/14 DOTA
Python中使用 Selenium 实现网页截图实例
2014/07/18 Python
Python常用随机数与随机字符串方法实例
2015/04/09 Python
对Python 2.7 pandas 中的read_excel详解
2018/05/04 Python
python Web开发你要理解的WSGI &amp; uwsgi详解
2018/08/01 Python
python同时遍历数组的索引和值的实例
2018/11/15 Python
Selenium+Python 自动化操控登录界面实例(有简单验证码图片校验)
2019/06/28 Python
python粘包问题及socket套接字编程详解
2019/06/29 Python
python创建与遍历List二维列表的方法
2019/08/16 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
2020/03/09 Python
Pandas中DataFrame基本函数整理(小结)
2020/07/20 Python
Scrapy爬虫文件批量运行的实现
2020/09/30 Python
《海底世界》教学反思
2014/04/16 职场文书
企业口号大全
2014/06/12 职场文书
怎样写离婚协议书
2014/09/10 职场文书
2014年国庆节寄语
2014/09/19 职场文书
2014年纠风工作总结
2014/12/08 职场文书
浅谈Redis位图(Bitmap)及Redis二进制中的问题
2021/07/15 Redis