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. .Net Core控制台应用加载读取Json配置文件

    ⒈添加依赖 Microsoft.Extensions.Configuration Microsoft.Extensions.Configuration.FileExtensions Microsoft ...

  2. 非旋(fhq)Treap小记

    前置知识:二叉搜索树 以下摘自 ↑: 二叉搜索树每次操作访问O(深度)个节点. 在刻意构造的数据中,树的形态会被卡成一条链,于是复杂度爆炸 它的复杂度与直接暴力删除类似. 但二叉搜索树扩展性强.更复杂 ...

  3. 01:keepalive高可用集群

    1.1 keepalived高可用软件介绍 1.keepalived--监控检查 注:keepalive软件有两种功能:监控检查.VRRP冗余协议 1. keepalive的作用是检测web服务器的状 ...

  4. 用css、如何让图片自动适应屏幕大小,不出现滚动条,不变形,兼容各个浏览器?急!!!

    如果是个背景图的话,定义一个div,高100%,宽100%,里面放个img<div class='bg'> <img src="images/bg.jpg" al ...

  5. Zabbix-自带监控项与Kye

    开启主机自动发现 ⦁选择配置 ->自动发现 ->创建自动发现->ip范围必须连续,不连续的话逗号分开 ⦁更新间隔 -> 2s ->更新 ⦁检查 -> 选择新的 -& ...

  6. CF 403D Beautiful Pairs of Numbers

    The sequence of integer pairs (a1, b1), (a2, b2), ..., (ak, bk) is beautiful, if the following state ...

  7. springboot页面模板thymeleaf的简单用法

    thymeleaf基础语法: 变量输出与字符串操作: ​ th:text 表示在页面输出值 ​ th:value 表示将一个值放入input标签的value中 判断字符串是否为空: ​ thymele ...

  8. 大型分布式爬虫准备 scrapy + request

    那些高手 爬虫好文 而我避免这些问题的方式,控制台清除所有定时 var id = setInterval(function() {}, 0); while (id--) clearInterval(i ...

  9. TensorFlow入门——MNIST初探

    import tensorflow.examples.tutorials.mnist.input_data as input_data import tensorflow as tf mnist = ...

  10. 免费数学神器Mathpix发布移动版了,一起来写更快的公式

    目录 1. 按 2. 下载地址 3. 介绍和使用 3.1. 介绍 3.2. 实际使用体验 1. 按 本文介绍的Mathpix可用于将手写的公式通过拍照或截图转成LaTeX 表达式. 写博客.记笔记最麻 ...