python3 第十五章 - 数据类型之Sets(集合)
python的官网里对集合的描述是:
Python also includes a data type for sets. A set is an unordered collection with no duplicate elements. Basic uses include membership testing and eliminating duplicate entries. Set objects also support mathematical operations like union, intersection, difference, and symmetric difference.
Python还包括用于集合的数据类型。集合是没有重复元素的无序容器。基本用法包括成员资格测试和消除重复条目。集合对象也支持数学运算,如并,交,差和对称差。
特点:
- 集合是一个无序的,不重复的数据组合
- 把一个列表变成集合,就自动去重了
- 关系测试,测试两组数据之前的交集、差集、并集等关系
1、创建
用花括号或者set()函数可以用来创建集合。注意,你必须使用set()创建一个空的集合,而不能用{},后面这种写法创建一个空的字典
实例:
basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'} # 用花括号的方式创建一个集合
set2 = set('abracadabra') # 用set()的方式创建一个集合
set3 = set() # 创建一个空的集合
print(basket)
以上代码,输出:
{'banana', 'orange', 'apple', 'pear'}
细心对照一下,你会发现,自动去除了重复,值得一提的是显示的顺序并不表示Sets是有序的
2、添加元素
通过add(key)方法可以添加元素到set中,可以重复添加,但不会有效果:
basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'} # 用花括号的方式创建一个集合
print('原来的basket:', basket)
basket.add('apple') # 添加一个重复的
print('添加一个重复项后:', basket)
basket.add('watermelon') # 添加一个不重复的
print('添加一个不重复项后:', basket)
以上代码,输出:
原来的basket: {'apple', 'banana', 'pear', 'orange'}
添加一个重复项后: {'apple', 'banana', 'pear', 'orange'}
添加一个不重复项后: {'banana', 'apple', 'watermelon', 'orange', 'pear'}
3、删除元素
可通过remove(key)方法可以删除元素:
basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'} # 用花括号的方式创建一个集合
print('原来的basket:', basket)
basket.remove('apple') # 删除 'apple'
print('删除 \'apple\':', basket)
以上代码,输出:
原来的basket: {'apple', 'pear', 'banana', 'orange'}
删除 'apple': {'pear', 'banana', 'orange'}
set和dict的唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。试试把list放入set,看看是否会报错。
set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作,我们通过实例来演示:
A = {'apple', 'orange', 'pear', 'banana'} # 用花括号的方式创建一个集合
B = {'apple', 'orange', 'watermelon'}
C = {'apple', 'orange'}
D = {'c++', 'python'}
print('集合A:', A)
print('集合B:', B)
print('A、B的交集:', A.intersection(B)) # 交集
print('A、B的并集:', A.union(B)) # 并集
print('A、B的差集:', A.difference(B)) # 差集 (项在A中,但不在B中)
print('A、B的对称差集:', A.symmetric_difference(B)) # 对称差集(项在A或B中,但不会同时出现在二者中)
# 子集(判断A是否包含了B里面的所有值)
print('B是A的子集?', B.issubset(A))
print('C是A的子集?', C.issubset(A))
# 父集(判断A是否为B的父集)
print('A是B的父集?', A.issuperset(B))
print('A是C的父集?', A.issuperset(C))
# 无交集(判断两个集合是否完全没有任何交集)
print('A与D是否有交集?', A.isdisjoint(D))
print('A与B是否有交集?', A.isdisjoint(B))
print() # 输出空行
print() # 输出空行
print('另一种写法')
print('集合A:', A)
print('集合B:', B)
# 另一种写法
print('A、B的交集 => A & B:', A & B) # 交集
print('A、B的并集 => A | B:', A | B) # 并集
print('A、B的差集 => A - B:', A - B) # 差集(项在A中,但不在B中)
print('A、B的对称差集 => A ^ B:', A ^ B) # 对称差集(项在A或B中,但不会同时出现在二者中)
以上代码,输出:
集合A: {'apple', 'orange', 'pear', 'banana'}
集合B: {'apple', 'orange', 'watermelon'}
A、B的交集: {'apple', 'orange'}
A、B的并集: {'apple', 'watermelon', 'pear', 'orange', 'banana'}
A、B的差集: {'pear', 'banana'}
A、B的对称差集: {'watermelon', 'pear', 'banana'}
B是A的子集? False
C是A的子集? True
A是B的父集? False
A是C的父集? True
A与D是否有交集? True
A与B是否有交集? False
另一种写法
集合A: {'apple', 'orange', 'pear', 'banana'}
集合B: {'apple', 'orange', 'watermelon'}
A、B的交集 => A & B: {'apple', 'orange'}
A、B的并集 => A | B: {'apple', 'watermelon', 'pear', 'orange', 'banana'}
A、B的差集 => A - B: {'pear', 'banana'}
A、B的对称差集 => A ^ B: {'watermelon', 'pear', 'banana'}
python3 第十五章 - 数据类型之Sets(集合)的更多相关文章
- python3 第十四章 - 数据类型之Dictionary(字典)
在python中字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下 ...
- python3 第十二章 - 数据类型之List(列表)
Python内置的一种数据类型是列表:list. list是一种有序的集合 可以随时添加和删除其中的元素. 它可以作为一个方括号内的逗号分隔值出现. 列表的数据项不需要具有相同的类型 创建一个列表,只 ...
- python3 第二十五章 - comprehensions(推导式)
推导式(又称解析式),是Python的一种独有特性.推导式是可以从一个数据序列构建另一个新的数据序列的结构体. 共有三种推导,在Python2和3中都有支持: 列表(list)推导式 字典(dict) ...
- Gradle 1.12用户指南翻译——第三十五章. Sonar 插件
本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- 15第十五章UDF用户自定义函数(转载)
15第十五章UDF用户自定义函数 待补上 原文链接 本文由豆约翰博客备份专家远程一键发布
- 《Linux命令行与shell脚本编程大全》 第十五章 学习笔记
第十五章:控制脚本 处理信号 重温Linux信号 信号 名称 描述 1 HUP 挂起 2 INT 中断 3 QUIT 结束运行 9 KILL 无条件终止 11 SEGV 段错误 15 TERM 尽可能 ...
- CSS3秘笈复习:十三章&十四章&十五章&十六章&十七章
第十三章 1.在使用浮动时,源代码的顺序非常重要.浮动元素的HTML必须处在要包围它的元素的HTML之前. 2.清楚浮动: (1).在外围div的底部添加一个清除元素:clear属性可以防止元素包围浮 ...
- Gradle 1.12用户指南翻译——第四十五章. 应用程序插件
本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- Gradle 1.12 翻译——第十五章. 任务详述
有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com ...
随机推荐
- 关于php变量的赋值和引用的区别
刚开始学习php,发现有些地方和js语法不同,所以记录下来. 这篇文章是总结php中变量赋值和引用的区别. 我们知道,js中,原始类型的赋值,是将值直接复制给变量:引用类型的赋值,是将内存地址复制给变 ...
- [Spark内核] 第38课:BlockManager架构原理、运行流程图和源码解密
本课主题 BlockManager 运行實例 BlockManager 原理流程图 BlockManager 源码解析 引言 BlockManager 是管理整个Spark运行时的数据读写的,当然也包 ...
- Spring Boot修改启动端口
spring boot是个好东西,可以不用容器直接在main方法中启动,而且无需配置文件,方便快速搭建环境.可是当我们要同时启动2个springboot工程时,就会有问题,有可能会因为8080端口被第 ...
- LVS集群ipvsadm命令和调度算法(6)
一.ipvsadm命令参考 为了更好的让大家理解这份命令手册,将手册里面用到的几个术语先简单的介绍一下: 术语解释: 1.virtual-service-address:是指虚拟服务器的ip地址2.r ...
- ogg-oracle to sqlserver
环境: source: 54 Centos7 oracle12.2 ogg12.3 target : 52 Windows sqlserver2012 ...
- 副本机制与副本同步------《Designing Data-Intensive Applications》读书笔记6
进入到第五章了,来到了分布式系统之中最核心与复杂的内容:副本与一致性.通常分布式系统会通过网络连接的多台机器上保存相同数据的副本,所以在本篇之中,我们来展开看看如何去管理和维护这些副本,以及这个过程之 ...
- JavaScript中的this(你不知道的JavaScript)
JavaScript中的this,刚接触JavaScript时大家都在大肆渲染说其多么多么的灵巧重要,然而自己并不关心:随着自己对JavaScript一步步深入了解,突然恍然大悟,原来它真的很重要!所 ...
- AtCoder Beginner Contest 069【A,水,B,水,C,数学,D,暴力】
A - K-City Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement In K-city, ...
- JAVA爬虫实践(实践三:爬虫框架webMagic和csdnBlog爬虫)
WebMagic WebMagic是一个简单灵活的Java爬虫框架.基于WebMagic,你可以快速开发出一个高效.易维护的爬虫. 采用HttpClient可以实现定向的爬虫,也可以自己编写算法逻辑来 ...
- 配置 java web Tomcat
index.jsp-->换为默认的MyEclipse JSP Editor打开方法:window -->Preference-->general-->editors--> ...