## 冻结的集合
前面[一节讲述了集合的基本概念](https://github.com/qiwsir/ITArticles/blob/master/BasicPython/123.md),注意,那里所涉及到的集合都是可原处修改的集合。还有一种集合,不能在原处修改。这种集合的创建方法是:
~~~
>>> 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所有元素,如下图所示
[![](https://box.kancloud.cn/2015-07-06_559a5e087dda7.png)](https://github.com/qiwsir/ITArticles/blob/master/Pictures/12401.png)
~~~
>>> 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所公有的元素,如下图所示
[![](https://box.kancloud.cn/2015-07-06_559a5e0d31d88.png)](https://github.com/qiwsir/ITArticles/blob/master/Pictures/12402.png)
~~~
>>> 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不同的部分元素,如下图所示
[![](https://box.kancloud.cn/2015-07-06_559a5e1c8a3ea.png)](https://github.com/qiwsir/ITArticles/blob/master/Pictures/12403.png)
~~~
>>> 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的对称差集,如下图所示
[![](https://box.kancloud.cn/2015-07-06_559a5e301f226.png)](https://github.com/qiwsir/ITArticles/blob/master/Pictures/12404.png)
~~~
>>> 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环境安装
- 集成开发环境(IDE)
- 数的类型和四则运算
- 啰嗦的除法
- 开始真正编程
- 初识永远强大的函数
- 玩转字符串(1):基本概念、字符转义、字符串连接、变量与字符串关系
- 玩转字符串(2)
- 玩转字符串(3)
- 眼花缭乱的运算符
- 从if开始语句的征程
- 一个免费的实验室
- 有容乃大的list(1)
- 有容乃大的list(2)
- 有容乃大的list(3)
- 有容乃大的list(4)
- list和str比较
- 画圈还不简单吗
- 再深点,更懂list
- 字典,你还记得吗?
- 字典的操作方法
- 有点简约的元组
- 一二三,集合了
- 集合的关系
- Python数据类型总结
- 深入变量和引用对象
- 赋值,简单也不简单
- 坑爹的字符编码
- 做一个小游戏
- 不要红头文件(1): open, write, close
- 不要红头文件(2): os.stat, closed, mode, read, readlines, readline
- 第二部分 穷千里目,上一层楼
- 正规地说一句话
- print能干的事情
- 从格式化表达式到方法
- 复习if语句
- 用while来循环
- 难以想象的for
- 关于循环的小伎俩
- 让人欢喜让人忧的迭代
- 大话题小函数(1)
- 大话题小函数(2)
- python文档
- 重回函数
- 变量和参数
- 总结参数的传递
- 传说中的函数条规
- 关于类的基本认识
- 编写类之一创建实例
- 编写类之二方法
- 编写类之三子类
- 编写类之四再论继承
- 命名空间
- 类的细节
- Import 模块
- 模块的加载
- 私有和专有
- 折腾一下目录: os.path.<attribute>
- 第三部分 昨夜西风,亭台谁登
- 网站的结构:网站组成、MySQL数据库的安装和配置、MySQL的运行
- 通过Python连接数据库:安装python-MySQLdb,连接MySQL
- 用Pyton操作数据库(1):建立连接和游标,并insert and commit
- 用Python操作数据库(2)
- 用Python操作数据库(3)
- python开发框架:框架介绍、Tornado安装
- Hello,第一个网页分析:tornado网站的基本结构剖析:improt模块、RequestHandler, HTTPServer, Application, IOLoop
- 实例分析get和post:get()通过URL得到数据和post()通过get_argument()获取数据
- 问候世界:利用GAE建立tornado框架网站
- 使用表单和模板:tornado模板self.render和模板变量传递
- 模板中的语法:tornado模板中的for,if,set等语法
- 静态文件以及一个项目框架
- 模板转义
- 第四部分 暮然回首,灯火阑珊处
- requests库
- 比较json/dictionary的库
- defaultdict 模块和 namedtuple 模块
- 第五部分 Python备忘录
- 基本的(字面量)值
- 运算符
- 常用的内建函数
- 扩展阅读(来自网络文章)
- 人生苦短,我用Python