set总结
set 定义
列表的特性:
- 可修改
- 无序
- 不重复
列表的创建:
1.直接创建; s = {‘a', 1, 'c'}
2.set() 创建一个空set; s = set()
3.set(iterable)创建一个包含可迭代对象元素的set; set = {'abc'}
#直接创建
>>> s = {'a', 1, 2, 'b'}
>>> s
{1, 2, 'b', 'a'}
#使用set()创建一个空set
>>> s = set()
>>> s
set()
#创建一个包含可迭代对象元素的set
>>> s = set('abc')
>>> s
{'c', 'b', 'a'}
set的方法:
| 方法 | 说明 |
|---|---|
| set.add(elem) | 本地修改,增加一个元素 |
| set.update(iterable) | 本地修改,增加可迭代对象的元素 |
| set.remove(elem) | 本地修改,删除一个元素, 返回None,元素不存在则报错 |
| set.discart(elem) | 本地修改,删除一个元素,不论是否存在,返回None |
| set.pop() | 本地修改,随机弹出一个元素,返回弹出的元素 |
| set.clear() | 本地修改 |
| set.copy() | 返回一个复制的新set |
>>> s = set('abc')
>>> s
{'c', 'b', 'a'}
#增加一个元素
>>> s.add('de')
>>> s
{'c', 'de', 'b', 'a'}
#将可迭代对象的元素增加到元组中 与union效果相同
>>> s.update('def')
>>> s
{'e', 'f', 'b', 'd', 'de', 'a', 'c'}
#remove删除一个元素
>>> s.remove('a')
>>> s
{'e', 'f', 'b', 'd', 'de', 'c'}
#remove删除一个不存在的元素
>>> s.remove('ab')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'ab'
#remove删除一个元素
>>> s.discard('e')
>>> s
{'f', 'b', 'd', 'de', 'c'}
#remove删除一个不存在的元素
>>> s.discard('ab')
>>> s
{'f', 'b', 'd', 'de', 'c'}
#pop随机弹出一个元素,并返回该元素
>>> s.pop()
'f'
>>> s2= s.copy()
>>> s2
{'d', 'de', 'b', 'c'}
>>> s2.clear()
>>> s2
set()
set集合的判断
| 角色 | 说明 | 判断 |
|---|---|---|
| 元素存在 | 集合中是否有或者没有这个元素 | x in set ; x not in set |
| 子集 | A是B的子集,说明A的所有元素在B中都存在 | A.issubset (B)或者 A <= B |
| 真子集 | A是B的真子集,说明A的所有元素都在B中且B的元素个数比A多。 | A < B |
| 超集 | A是B的超集,说明A中有B的所有元素 | A.issuper(B)或者A >= B |
| 真超集 | A是B的真超集,说明A中有B的所有元素,且A的元素个数比B多 | A > B |
| isdisjoin | A中所有的元素都不在B中 | A.isdisjoint(B) |
#几个范例
>>> A = {1, 2, 3}
>>> 1 in A
True
>>> 4 in A
False
>>> 4 not in A
True
>>> A = {1,2,3,4}
>>> B = {1,2,3,4,5}
>>> A.issubset(B)
True
>>> A<B
True
>>> A = {1,2,3,4}
>>> B = {1,2,3,4}
>>> A.issubset(B)
True
>>> A<B
False
>>> A<=B
True
>>> A = {1 ,2, 3}
>>> B = {4, 5, 6}
>>> A.isdisjoint(B)
True
set运算
| 操作 | 说明 | 方法 | 运算符重载 |
|---|---|---|---|
| 并集-->返回新集合 | A与B的并集,返回包含A与B所有元素的集合,是A和B的super集合 | A.union(*others) | A | B |
| 并集-->本地修改 | 本地修改集合A为A与B的并集 | A.update(*others) | A |= B |
| 交集-->返回新集合 | 返回A与B的共同元素的集合 | A.intersection(others) | A & B |
| 交集-->本地修改 | 本地修改A集合为A与B交集, | A.intersection_update(*others) | A &= B |
| 差集-->返回新集合 | A的B差集,返回集合A中减去B的元素的集合 | A.difference(*others) | A - B |
| 差集-->本地修改 | 本地修改A集合为A与B的差集 | A.difference_update(*others) | A -= B |
| 对称差集-->返回新集合 | 返回一个包含只在A中和只在B中的元素的集合,又被称为补集 | A.symmetric_difference(B) | A ^ B |
| 对称差集-->本地修改 | 本地修改A为A与B的相对差集 | A.symmetric_difference(B) | A ^= B |
并集
>>> A = {1, 2, 3}
>>> B = {3, 4, 5}
>>> A.union(B)
set([1, 2, 3, 4, 5])
>>> A | B
set([1, 2, 3, 4, 5])
并集的运算符重载,必须为set,union是个迭代对象就可以
>>> C = (5,6)
>>> A | B | C
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for |: 'set' and 'tuple'
>>> A.union(B,C)
set([1, 2, 3, 4, 5, 6])
并集的本地修改
>>> C = (5,6)
>>> A
set([1, 2, 3])
>>> A.update(B)
>>> A
set([1, 2, 3, 4, 5])
>>> A |= set(C)
>>> A
set([1, 2, 3, 4, 5, 6])
交集运算
>>> A = {1, 2, 3}
>>> B = {3, 4, 5}
>>> C = (5,6)
>>> A.intersection(B)
set([3])
>>> A.intersection(B,C)
set([])
>>> A & B
set([3])
>>> A & B & C
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for &: 'set' and 'tuple'
>>> A & B & set(C)
set([])
>>> A.intersection_update(B)
>>> A
set([3])
>>> A &= set(C)
>>> A
set([])
差集运算
>>> A = {1, 2, 3}
>>> B = {3, 4, 5}
>>> C = (5,6)
>>> A.difference(B)
set([1, 2])
>>> A.difference(B,C)
set([1, 2])
>>> A -B -C
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for -: 'set' and 'tuple'
>>> A - B - set(C)
set([1, 2])
>>> A.difference_update(B)
>>> A
set([1, 2])
>>> A -= set(C)
>>> A
set([1, 2])
相对差集(补集)
>>> A = {1, 2, 3}
>>> B = {3, 4, 5}
>>> C = (5,6)
>>> A.symmetric_difference(B)
set([1, 2, 4, 5])
>>> A ^ B
set([1, 2, 4, 5])
>>> A.symmetric_difference(C)
set([1, 2, 3, 5, 6])
>>> A.symmetric_difference_update(B)
>>> A
set([1, 2, 4, 5])
>>> A ^= set(C)
set([1, 2, 3, 5, 6])
随机推荐
- 【Linux-驱动】简单字符设备驱动结构和初始化
(1)在编写简单字符设备驱动的时候,首先要申请一个设备结构struct cdev: struct cdev { struct kobject kobj; struct module *owner; / ...
- 使用vs工具查看dll依赖(也可查看pyc文件的依赖)
vs工具中有个工具叫dumpin.exe,可以用来查看exe文件.dll文件.pyc文件依赖于哪些dll,从而针对性地去检查具体缺失哪些文件(目前是在装TensorFlow时查看具体需要哪个版本的cu ...
- Hive 教程(四)-分区表与分桶表
在 hive 中分区表是很常用的,分桶表可能没那么常用,本文主讲分区表. 概念 分区表 在 hive 中,表是可以分区的,hive 表的每个区其实是对应 hdfs 上的一个文件夹: 可以通过多层文件夹 ...
- spark教程(一)-集群搭建
spark 简介 建议先阅读我的博客 大数据基础架构 spark 一个通用的计算引擎,专门为大规模数据处理而设计,与 mapreduce 类似,不同的是,mapreduce 把中间结果 写入 hdfs ...
- Codeforces 1190D. Tokitsukaze and Strange Rectangle
传送门 注意到矩形往上是无限的,考虑把点按 $y$ 从大到小考虑 对于枚举到高度为 $h$ 的点,设当前高度大于等于 $h$ 的点的所有点的不同的 $x$ 坐标数量为 $cnt$ 那么对于这一层高度 ...
- Java——BufferedImage对象
BufferedImage对象中最重要的两个组件是Raster与ColorModel,分别用于存储图像的像素数据和颜色数据. 1.Raster对象的作用与像素存储 BufferedImage支持从Ra ...
- 使用TableSnapshotInputFormat读取Hbase快照数据
根据快照名称读取hbase快照中的数据,在网上查了好多资料,很少有资料能够给出清晰的方案,根据自己的摸索终于实现,现将代码贴出,希望能给大家有所帮助: public void read(org.apa ...
- ado.net SqlHelp类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- Spark运行时的内核架构以及架构思考
一: Spark内核架构 1,Drive是运行程序的时候有main方法,并且会创建SparkContext对象,是程序运行调度的中心,向Master注册程序,然后Master分配资源. 应用程序: A ...
- spring boot入门与进阶教程
SpringBoot入门.SpringBoot进阶.Spring Cloud微服务.Spring Ecosystem 微服务相关.Spring Boot 入门 IDEA 版本.Spring Boot集 ...