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])
随机推荐
- (5.12)mysql高可用系列——复制中的在线切换GTID模式/增加节点/删除节点
目录 [0]需求 前提,已经假设好基于传统异步复制的主库和从库1. [0.1]传统异步切换成基于GTID的无损模式 [0.2]增加特殊要求的从库 [1]操作环境 [2]构建 复制->半同步复制 ...
- node项目自动化部署--基于Jenkins,Docker,Github(3)自动化部署
GitHub仓库 由于现在的代码基本上都是多人合作开发,所以肯定会用到像 git 这样的版本控制工具 所以这里使用 GitHub 来做一个演示 首先我们需要在github上新建一个仓库 点击New来新 ...
- 如何获取字符串中某个具体的数值--通过json.load转化成字典形式获取
r=requests.get('http://httpbin.org/get').text print(r) # print(type(r)) # 如果要获取User-Agent的详细数值,需要做JS ...
- Mysql binlog应用场景与原理深度剖析
1 基于binlog的主从复制 Mysql 5.0以后,支持通过binary log(二进制日志)以支持主从复制.复制允许将来自一个MySQL数据库服务器(master) 的数据复制到一个或多个其他M ...
- C++练习 | 铁轨问题
#include <iostream> #include <cmath> #include <cstring> #include <string> #i ...
- CentOS7通过YUM安装MySQL5.6
检查系统中的 MySQL,并删除现有的 Mysql 软件包. $ rpm -qa | grep mysql 这里如果没有返回任何东西证明没有安装任何 MySQL 相关的应用.如下图: 由于 cento ...
- MVCC实现机制
1. MVCC简介 1.1 什么是MVCC MVCC(Multiversion concurrency control )是一种多版本并发控制机制. 1.2 MVCC是为了解决什么问题? 并发访问(读 ...
- Git复习(一)之简介、安装、集中式和分布式
简介 Git是分布式版本控制系统,使用C语言开发的,CVS.SVN是集中式的版本控制系统,集中式的版本控制系统不但速度慢,而且必须联网才能使用. Git是分布式版本控制系统,同一个Git仓库,可以 分 ...
- 常用的商业级和免费开源Web漏洞扫描工具
Scanv 国内著名的商业级在线漏洞扫描.可以长期关注,经常会有免费活动.SCANV具备自动探测发现无主资产.僵尸资产的功能,并对资产进行全生命周期的管理.主动进行网络主机探测.端口探测扫描,硬件特性 ...
- Windows访问VirtualBox的Redis服务器
一般来讲,我们不愿意在Windows上面安装太多的软件,这样会导致Windows运行太慢. 所以我在windows上面安装了VirtualBox,然后把相关的软件都安装在virtualBox里面,比如 ...