跟老齐学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怎么学好python?
Oct 07 Python
Python文本相似性计算之编辑距离详解
Nov 28 Python
详解python里使用正则表达式的分组命名方式
Oct 24 Python
python实现寻找最长回文子序列的方法
Jun 02 Python
Python面向对象之接口、抽象类与多态详解
Aug 27 Python
简单了解Python生成器是什么
Jul 02 Python
Python统计学一数据的概括性度量详解
Mar 03 Python
Python中私有属性的定义方式
Mar 05 Python
Python Tornado批量上传图片并显示功能
Mar 26 Python
keras在构建LSTM模型时对变长序列的处理操作
Jun 29 Python
matlab xlabel位置的设置方式
May 21 Python
在Python中如何使用yield
Jun 07 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
ajax实现无刷新分页(php)
2010/07/18 PHP
微信扫描二维码登录网站代码示例
2013/12/30 PHP
php中smarty区域循环的方法
2015/06/11 PHP
php 微信公众平台开发模式实现多客服的实例代码
2016/11/07 PHP
php设计模式之策略模式应用案例详解
2019/06/17 PHP
Yii 框架入口脚本示例分析
2020/05/19 PHP
爱恋千雪-US-AscII加密解密工具(网页加密)下载
2007/06/06 Javascript
jquery加载页面的方法(页面加载完成就执行)
2011/06/21 Javascript
a标签的href和onclick 的事件的区别介绍
2013/07/26 Javascript
JavaScript的arguments对象应用示例
2014/09/15 Javascript
深入理解JavaScript系列(37):设计模式之享元模式详解
2015/03/04 Javascript
举例讲解JavaScript中关于对象操作的相关知识
2015/11/16 Javascript
JavaScript中的this使用详解
2016/07/27 Javascript
JavaScript面试开发常用的知识点总结
2016/08/08 Javascript
BootStrap3使用错误记录及解决办法
2016/12/22 Javascript
Node.js 基础教程之全局对象
2017/08/06 Javascript
浅谈Node.js 子进程与应用场景
2018/01/24 Javascript
vue的toast弹窗组件实例详解
2018/05/14 Javascript
JavaScript实现一个带AI的井字棋游戏源码
2018/05/21 Javascript
javascript系统时间设置操作示例
2019/06/17 Javascript
[01:10:03]OG vs EG 2018国际邀请赛淘汰赛BO3 第三场 8.23
2018/08/24 DOTA
跟老齐学Python之编写类之四再论继承
2014/10/11 Python
Python2和Python3之间的str处理方式导致乱码的讲解
2019/01/03 Python
python 字符串常用方法汇总详解
2019/09/16 Python
在jupyter notebook中调用.ipynb文件方式
2020/04/14 Python
CSS3 animation实现简易幻灯片轮播特效
2016/09/27 HTML / CSS
美国儿童运动鞋和服装零售商:Kids Foot Locker
2017/08/05 全球购物
nohup的用法
2012/11/26 面试题
家长会演讲稿范文
2014/01/10 职场文书
C++程序员求职信范文
2014/04/14 职场文书
大学学风建设方案
2014/05/04 职场文书
《改造我们的学习》心得体会
2014/11/07 职场文书
合理化建议书
2015/02/04 职场文书
Alexa停服!网站排名将何去何从?目前还没有替代品。
2022/04/15 杂记
二维码条形码生成的JavaScript脚本库
2022/07/07 Javascript
Redis配置外网可访问(redis远程连接不上)的方法
2022/12/24 Redis