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 ...
随机推荐
- SSM框架开发web项目系列(六) SpringMVC入门
前言 我们最初的javaSE部分学习后,基本算是入门了,也熟悉了Java的语法和一些常用API,然后再深入到数据库操作.WEB程序开发,渐渐会接触到JDBC.Servlet/Jsp之类的知识,期间可能 ...
- kylin客户端(python编写)不能按照预期的segment进行rebuild
kylin_client_tool 提供了对cube进行BUILD,REBUILD,MERGE功能,其中REBUILD却不能达到预期的效果按照指定的segment执行. 场景: 当我在kylin we ...
- ISE14.7安装教程(转)
ISE14.7可在百度云中下载链接:http://pan.baidu.com/s/1boQKyzd密码:a0m2 原文链接:http://blog.chinaaet.com/crazybird/p/3 ...
- [PHP] PHP服务器接口SAPI中的结构体
SAPI:在各个服务器抽象层之间遵守着相同的约定,这里我们称之为SAPI接口.例如命令行程序的实现,Apache的mod_php模块实现以及fastcgi的实现等等 1.结构体:使用结构体(Struc ...
- Mistakes in Hello World
今天在cmd中用Python写第一行代码"Hello World"出现错误. 写好的源码"HelloWorld.py"存放于" F:\learning ...
- React Native学习(三)—— 使用导航器Navigation跳转页面
本文基于React Native 0.52 参考文档https://reactnavigation.org/docs/navigators/navigation-prop 一.基础 1.三种类型 Ta ...
- Tomcat多个项目部署,通过Nginx反向代理分别配置二级域名的流程
购买域名.示例:example.com 设置多个二级域名.如图: 配置tomcat文件: 修改tomcat/conf目录下的server.xml文件: 如下配置配置了3个容器,使用三个不同的端口. 请 ...
- 一种数据与逻辑分离的Python单元测试工具
一种数据与逻辑分离的Python单元测试工具 几个概念 TestCase TestCase是一个完整的测试单元,最小的测试执行实体,就是我们常说的测试用例. TestSuite 以某种特性将测试用例组 ...
- 细说log4j
可能做过java项目的基本上都是用过log4j,它是用来做java日志的.比如我们做一个项目分为很多的模块,那我们怎么想要知道它什么时候启动了,这时候我们可以使用log4j标记某某模块启动了. 努力的 ...
- 信息学奥赛一本通算法(C++版)基础算法:高精度计算
高精度加法(大位相加) #include <bits/stdc++.h> using namespace std; int main() { ],b1[]; ],b[],c[];//a,b ...