跟老齐学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里将list中元素依次向前移动一位
Sep 12 Python
Python中内建函数的简单用法说明
May 05 Python
详解python并发获取snmp信息及性能测试
Mar 27 Python
Python实现对象转换为xml的方法示例
Jun 08 Python
使用python生成杨辉三角形的示例代码
Aug 29 Python
Pycharm配置远程调试的方法步骤
Dec 17 Python
基于python进行抽样分布描述及实践详解
Sep 02 Python
python GUI库图形界面开发之PyQt5窗口布局控件QStackedWidget详细使用方法
Feb 27 Python
Python和Bash结合在一起的方法
Nov 13 Python
基于Python爬取搜狐证券股票过程解析
Nov 18 Python
python基础之爬虫入门
May 10 Python
Python Pandas pandas.read_sql_query函数实例用法分析
Jun 21 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
服务器端解压缩zip的脚本
2006/12/22 PHP
php中json_encode中文编码问题分析
2011/09/13 PHP
php数组函数array_key_exists()小结
2015/12/10 PHP
关于Curl在Swoole协程中的解决方案详析
2019/09/12 PHP
PHP 实现链式操作
2021/03/09 PHP
JavaScript中对象property的读取和写入方法介绍
2014/12/30 Javascript
基于jquery实现无限级树形菜单
2016/03/22 Javascript
JS实现密码框的显示密码和隐藏密码功能示例
2016/12/26 Javascript
详解nodejs微信公众号开发——4.自动回复各种消息
2017/04/11 NodeJs
BootStrap selectpicker后台动态绑定数据
2017/06/01 Javascript
bootstrap实现二级下拉菜单效果
2017/11/23 Javascript
vue中的计算属性的使用和vue实例的方法示例
2017/12/04 Javascript
vue登录路由验证的实现
2017/12/13 Javascript
基于JavaScript判断两个对象内容是否相等
2020/01/10 Javascript
JS代码实现页面切换效果
2021/01/10 Javascript
[04:02]DOTA2上海特锦赛小组赛第二日recap精彩回顾
2016/02/28 DOTA
[00:56]PWL开团时刻DAY8——追追追追追!
2020/11/09 DOTA
Python科学计算环境推荐——Anaconda
2014/06/30 Python
python以环状形式组合排列图片并输出的方法
2015/03/17 Python
Pthon批量处理将pdb文件生成dssp文件
2015/06/21 Python
Python中shutil模块的常用文件操作函数用法示例
2016/07/05 Python
简单了解Django模板的使用
2017/12/20 Python
用tensorflow搭建CNN的方法
2018/03/05 Python
基于python实现KNN分类算法
2020/04/23 Python
python 实现一个反向单位矩阵示例
2019/11/29 Python
基于打开pycharm有带图片md文件卡死问题的解决
2020/04/24 Python
基于Keras中Conv1D和Conv2D的区别说明
2020/06/19 Python
比利时网上药店: Drogisterij.net
2017/03/17 全球购物
简述安装Slackware Linux系统的过程
2012/05/08 面试题
药店主任岗位责任制
2014/02/10 职场文书
毕业留言寄语大全
2014/04/10 职场文书
初一学生期末评语
2014/04/24 职场文书
主题班会演讲稿
2014/05/22 职场文书
个人四风问题整改措施
2014/10/24 职场文书
小学教师个人总结
2015/02/05 职场文书
公司员工培训管理制度
2015/08/04 职场文书