[PY3]——内置数据结构(6)——集合及其常用操作
集合及其常用操作Xmind图

集合的定义
# set( )
# {0,1,2} //注意不能用空的大括号来定义集合
# set(可迭代对象) In [1]: s=set();type(s)
Out[1]: set In [2]: s={0,1,2};type(s)
Out[2]: set In [3]: s=set(range(5));type(s)
Out[3]: set
增加操作
1. add()
In [8]: s={0,1,2}
#在集合后添加单个元素
In [9]: s.add(3);s
Out[9]: {0, 1, 2, 3}
#增加已存在的元素时,集合不变
In [10]: s.add(3);s
Out[10]: {0, 1, 2, 3}
2. update()
In [12]: s={0,1,2}
#增加一个可迭代对象
In [13]: s.update(range(4,7));s
Out[13]: {0, 1, 2, 4, 5, 6}
In [14]: s.update(range(4,9));s
Out[14]: {0, 1, 2, 4, 5, 6, 7, 8}
删除操作
1. remove() 删除给定元素,元素不存在抛出KeyError
In [16]: s={0,1,2}
In [17]: s.remove(0);s
Out[17]: {1, 2}
In [18]: s.remove(10);s
KeyError: 10
2. discard() 删除给定元素,元素不存在什么都不做
In [27]: s=set(range(10));s
Out[27]: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} In [29]: s.discard(4);s
Out[29]: {0, 1, 2, 3, 5, 6, 7, 8, 9} In [30]: s.discard(10);s
Out[30]: {0, 1, 2, 3, 5, 6, 7, 8, 9}
3. pop() 随机删除一个元素并返回该元素
In [19]: s={0,1,2}
In [21]: s.pop()
Out[21]: 0
In [22]: s.pop()
Out[22]: 1
In [24]: s.pop()
Out[24]: 2
In [25]: s
Out[25]: set()
In [26]: s.pop() //当集合为空时。报错KeyError
KeyError: 'pop from an empty set'
4. clear() 清空集合
In [31]: s=set(range(10));s
Out[31]: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} In [32]: s.clear();s
Out[32]: set()
修改操作
集合不能修改单个元素
查找操作
集合不是一个线性结构,所以集合不能通过索引查找、集合也没有顺序、集合也没有访问单个元素的方法
集合运算
1. 交集运算
# intersection()求交集
In [1]: s1={1,2,3};s2={2,3,6} In [2]: s1.intersection(s2)
Out[2]: {2, 3} # intersection_update() 求交集并修改了s1
In [5]: s1.intersection_update(s2) In [6]: print(s1,s2)
{2, 3} {2, 3, 6} # set重载了‘&’作为求交集的运算符
In [9]: s1 & s2
Out[9]: {2, 3}
2. 差集运算
# difference()
In [10]: s1={1,2,3};s2={2,3,6} In [11]: s1.difference(s2)
Out[11]: {1} In [12]: s2.difference(s1)
Out[12]: {6} In [13]: print(s1,s2)
{1, 2, 3} {2, 3, 6} # difference_update()
In [14]: s1.difference_update(s2) In [15]: print(s1,s2)
{1} {2, 3, 6} # set重载了‘-’作为求差集的运算符
In [17]: s1-s2
Out[17]: {1} In [18]: s2-s1
Out[18]: {6}
3. 对称差集=交集的补集
# symmetric_difference()求对称差集
In [19]: s1={1,2,3};s2={2,3,6} In [20]: s1.symmetric_difference(s2)
Out[20]: {1, 6} # symmetric_difference_update()同理 # set重载了‘^’作为求对称差集的运算符
In [26]: s1^s2
Out[26]: {1, 6}
4. 并集运算
# union()求并集
In [27]: s1={1,2,3};s2={2,3,6} In [28]: s1.union(s2)
Out[28]: {1, 2, 3, 6} # update()就是并集的uptdate版本
In [29]: s1.update(s2) In [30]: print(s1,s2)
{1, 2, 3, 6} {2, 3, 6} # set重载了‘|’作为求并集的运算符
In [2]: s1|s2
Out[2]: {1, 2, 3, 6}
集合相关的判断
# A.issubset(B) 判断A是否是B的子集
In [1]: s1={1,2,3,4};s2={2,3} In [2]: s2.issubset(s1)
Out[2]: True In [3]: s1.issubset(s2)
Out[3]: False # A.issuperset(B) 判断A是否是B的超集
In [4]: s1.issuperset(s2)
Out[4]: True In [5]: s2.issuperset(s1)
Out[5]: False # isdisjoint()判断是否有交集,有交集返回False、无交集返回True
In [6]: s1={1,2,3,4};s2={2,3};s1.isdisjoint(s2)
Out[6]: False In [8]: s3={1,2};s4={6,3};s3.isdisjoint(s4)
Out[8]: True
集合的应用
1.去重
2.成员运算符时的效率提高(参见博文《[PY3]——基本语法中成员运算符的内容》)
3.场景一:有一个api它要有认证并且有一定权限才可以访问,例如要求满足权限A/B/C任意一项,有一个用户具有权限B、C、D,判断该用户是否有权限访问此API
4.场景二:有一个任务列表存储全部的任务,有一个列表存储已完成的任务,找出未完成的任务
集合的限制
总结来说:集合的元素必须是可Hash的(tuple、str、bytes等)
# list不可作为集合元素
In [10]: {[1,1,2],[6,6,8]}
TypeError: unhashable type: 'list' # bytearray不可作为集合元素
In [11]: {bytearray(b'abc')}
TypeError: unhashable type: 'bytearray' # set不可作为集合元素
In [12]: {{6,6,8}}
TypeError: unhashable type: 'set' # tuple可作为集合元素
In [13]: {(3,1,3)}
Out[13]: {(3, 1, 3)} # bytes可作为集合元素
In [14]: {b'abc'}
Out[14]: {b'abc'} # str可以作为集合元素
In [15]: {'b','a'}
Out[15]: {'a', 'b'}
[PY3]——内置数据结构(6)——集合及其常用操作的更多相关文章
- [PY3]——内置数据结构(7)——字典及其常用操作
字典及其常用操作Xmind图 关于字典 字典是一种key-value结构 字典是无序的 字典的定义 # {}大括号可以直接定义一个空字典 In [1]: d={};type(d) Out[1]: di ...
- [PY3]——内置数据结构(1)——列表及其常用操作
列表及其常用操作_xmind图 about列表 列表是一个序列,用于顺序存储数据 列表分为两种:ArrayList(用数组实现).LinkedList(用链表实现) 定义与初始化 #l ...
- [PY3]——内置数据结构(3)——字符串及其常用操作
字符串及其常用操作xmind图 字符串的定义 1. 单引号/双引号 In [1]: s1='hello world' In [2]: s1="hello world" 2. 三对单 ...
- [PY3]——内置数据结构(2)——元组及其常用操作
定义和初始化 #tuple() 使用工厂函数tuple定义一个空元组 #() 使用圆括号定义一个空元组 #(1,2,3) 使用圆括号定义有初始值的元组 #tuple(可迭代对象) 把可迭代对象转换为一 ...
- [PY3]——内置数据结构(5)——字符串编码
py2和py3中关于字符串的最大区别? python2中只有 unicode类型 而python3中有 string bytes两种类型 关于string和bytes的区分? 1.str是文本序列.b ...
- [PY3]——内置数据结构(9)——线性结构与切片/命名切片slice()
线性结构的总结 列表list 元组tuple 字符串str bytes bytearray的共同点: 都是顺序存储.顺序访问的: 都是可迭代对象: 都可以通过索引访问 线性结构的特征: 可迭代 ...
- [PY3]——内置数据结构(8)——解构与封装
### 解构的理解与用法 ### 解构是python很有特色的一个功能,被很多语言借鉴(例如ES6) # 元素按照顺序赋值给变量 In [31]: lst=list(range(5)) In [32] ...
- [PY3]——内置数据结构(4)——字符串格式化(format)
字符串格式化是拼接字符串的一种手段 join和+拼接字符串的方法,难以控制格式 printf style 字符串格式化 这种方法是从c语言继承过来的 # 待格式化的字符串:一个字符串存在占位符 In ...
- python面试总结4(算法与内置数据结构)
算法与内置数据结构 常用算法和数据结构 sorted dict/list/set/tuple 分析时间/空间复杂度 实现常见数据结构和算法 数据结构/算法 语言内置 内置库 线性结构 list(列表) ...
随机推荐
- Angularjs 实现页面遮罩层功能
实现效果: 1.loading指令: "use strict" /** * Created by yw on 2015/9/27. * user defined loading d ...
- OpenSSH服务及其相关应用
远程登录工具: telnet,TCP/23:认证明文,数据传输明文,不够安全,所以出现了ssh ssh:Secure SHell,TCP/22,刚开始免费,后来商业化了,所以出现了Openssh,这个 ...
- ASP.NET Core IdentityServer4 新手上路
OAuth2.0资料 今天看到一篇博主写了该系列文章,贴图和过程都比较详细,俗话说实践是检验真理的唯一标准(如果是按照参考文章复制粘贴,应该不会出现踩坑,但是我喜欢自己手动敲一遍),发现几个坑,因而总 ...
- C# 使用ProcessStartInfo调用exe获取不到重定向数据的解决方案
emmmmm,最近在研究WFDB工具箱,C语言写的,无奈本人C语言功底不够,只想直接拿来用,于是打算通过ProcessStartInfo来调取编译出来的exe程序获取输出. 一开始就打算偷懒,从园子里 ...
- Fiddler关闭后打不开网页
今天项目系统测试的时候,CS客户端的Restful请求都失败,但是实际上的服务是正常开启的,马上通过cmd指令ping了一下服务,正常:再用telnet试了一下端口,也是正常.不过随后发现在这台电脑上 ...
- 【Oracle 12c】最新CUUG OCP-071考试题库(55题)
55.(13-3) choose the best answer: Which statement is true regarding the SESSION_PRIVS dictionary vie ...
- Java中运算符“|”和“||”以及“&”和“&&”区别
1.“|”运算符:不论运算符左侧为true还是false,右侧语句都会进行判断,下面代码 int a =1,b=1; if(a++ == 1 | ++b == 2) System.out.printl ...
- 【文文殿下】后缀自动机(SAM)求最长公共子串的方法
首先,在A 串上建立一个SAM,然后用B串在上面跑.具体跑的方法是: 从根节点开始,建立一个指针 p ,指着B串的开头,同步移动指针,沿着SAM的边移动,如果可以移动(即存在边)那么万事皆好,直接le ...
- Linux 环境变量加强
Linux 环境变量加强 # 前言 今天,主要是之前搭建 GO 环境包的使用发现自己对 Linux 环境变量还不是很熟悉. 遇到环境变量的问题还是会有些懵逼.所以,今天写点Linux 环境变量的文章, ...
- 浅谈javascript和python语言的深拷贝
深拷贝: 之前在开发中我遇到一个很大的bug,经过我多次调试之后我发现原本应该有保存数据的地方数据全部被清空,仔细一看发现原来是被人为删除,明明操作的是一个副本,为什么原本也会跟着一起被删除呢?经过了 ...