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])

随机推荐

  1. ABC136E Max GCD

    Thinking about different ways of thinking. --- LzyRapx 题目 思路比较容易想到. Observations: 每次操作过后和不变. 枚举和的因子 ...

  2. reids集群状态正常redis.clients.jedis.exceptions.JedisNoReachableClusterNodeException: No reachable node in cluster

    重新启动redis集群时启动失败,报错: redis.clients.jedis.exceptions.JedisNoReachableClusterNodeException: No reachab ...

  3. 使用openresty实现按照流量百分比控制的灰度分流控制

    安装好以后直接就可以配置实践了,openresty将lua都集成好了,nginx配置文件无需特殊声明引入lua file. 1.nginx.conf 添加两个灰度发布的环境 #grey 灰度环境地址 ...

  4. GoAccess操作手册

    名字 GoAccess - 可视化 Web 日志分析工具. 语法 goaccess [filename] [ options ... ] [-c][-M][-H][-q][-d][...] 描述 Go ...

  5. ECharts模拟百度迁徙实例

    本实例原始信息: 作者:anix 演示地址:Echarts模拟迁徙 源码地址:GitHub-ananix-qianxi 前言 "百度地图春节人口迁徙大数据"(简称"百度迁 ...

  6. 第十九篇 jQuery初步学习

    jQuery 初步学习   jQuery可以理解为是一种脚本,需要到网上下载,它是一个文件,后缀当然是js的文件,它里面封装了很多函数方法,我们直接调用即可,就比方说,我们用JS,写一个显示与隐藏,通 ...

  7. 使用ELK进行日志分析

    0x01 前言: 前段时间做应急,总是需要溯源分析,痛点是数据量比较大,想要短时间能分析出来.再者就是之前在调查某酒店事件的时候特别羡慕某产商有各种分析溯源工具.反思过后,终于在没有那么忙的时候开始搭 ...

  8. iQOO5G手机卡槽公布

    华为.中兴.一加.OPPO.vivo各自的5G手机相继拿到了3C强制认证,小米的也在路上,5G手机真的越来越近了. 今天,vivo iQOO还公布了其5G手机所用的卡槽样式,可以看到采用了双卡设计,同 ...

  9. fiddler获取响应时间以及服务器IP

    抓包工具fiddler实现http协议请求应答抓包.在接口测试.性能测试.安全测试等软件测试活动过程中,可能会遇到需要获取接口响应时间.接口服务器IP这样的情况.默认情况下fiddler不支持接口响应 ...

  10. .net Core的例子

    阅读文章: 十二个 ASP.NET Core 例子