首页 > 编程语言 >Python的set集合详解

Python的set集合详解

时间:2023-07-05 18:46:49浏览次数:43  
标签:set Python s2 s1 元素 s3 详解 集合

 

Python 还包含了一个数据类型 —— set (集合)。集合是一个无序不重复元素的集。基本功能包括关系测试和消除重复元素。集合对象还支持 union(联合),intersection(交),difference(差)和 sysmmetric difference(对称差集)等数学运算。

创建集合set

  大括号或 set() 函数可以用来创建集合。 

  set集合类需要的参数必须是迭代器类型的,如:序列、字典等,然后转换成无序不重复的元素集。由于集合是不重复的,所以可以对字符串、列表、元组进行去重操作。

创建空集合

>>> s=set()
>>> s
set()
>>> s1=set([]) #列表
>>> s1
set()
>>> s2=set(()) #元组
>>> s2
set()
>>> s3=set({}) #字典
>>> s3
set()

  注意:想要创建空集合,你必须使用 set() 而不是 {}。后者用于创建空字典,我们在后面介绍的一种数据结构。

创建非空集合

 即列表,元组,字典不在是空值,举两个例子

>>> s1=set([1,2,3,4])
>>> s1
{1, 2, 3, 4}
  
>>> s3=set({'a':2,'b':3,'c':4})
>>> s3
{'c', 'a', 'b'}

  注:字典转set集合,需要注意的是,只取了字典的key,相当于将字典中的dict.keys()列表转成set集合。

集合的操作

集合添加

  集合的添加有两种方式,分别是add和update。但是它们在添加元素时是由区别的:

  • add()方法
    把要传入的元素作为一个整体添加到集合中,如:
>>> s=set('one')
>>> s
{'e', 'o', 'n'}
>>> s.add('two')
>>> s
{'e', 'two', 'o', 'n'}
  • update()方法
    是把要传入的元素拆分成单个字符,存于集合中,并去掉重复的字符。可以一次添加多个值,如:
>>> s=set('one')
>>> s
{'e', 'o', 'n'}
>>> s.update('two')
>>> s
{'e', 'n', 't', 'w', 'o'}

集合删除

  集合的删除操作使用的方法跟列表是一样的,使用的也是remove方法。如:

  • setVar.remove(element)
    setVar :为一个set类型的变量
    element :表示要查找并删除的元素
    函数作用:
    在集合setVar中查找element元素,如果存在则删除;如果没找到,则报错。
>>> s=set('one')
>>> s
{'e', 'o', 'n'}
>>> s.remove('e')
>>> s
{'n', 'o'}
  • setVar.discard(element)
    setVar :为一个set类型的变量
    element :表示要查找并删除的元素
    函数作用:
    在集合setVar中查找element元素,如果存在则删除;如果没找到,则什么也不做。
>>> sList
set([1, 2, 3, 4, 5])
>>> sList.discard(1)
>>> sList
set([2, 3, 4, 5])
  • s.pop()
    s:为set类型的变量
    函数作用:
    删除并返回set类型的s中的一个不确定的元素,如果为空引发KeyError错误。
>>> sList
set([2, 3, 4, 5])
>>> sList.pop()
2
  • s.clear()
    s:set类型的变量
    函数作用:
    清空s集合中的所有元素
>>> sList
set([3, 4, 5])
>>> sList.clear()
>>> sList
set([])

集合的遍历

集合的遍历跟序列的遍历方法完全一样。

>>> s=set('one')
>>> s
{'e', 'o', 'n'}
>>> for i in s:
	print(i)
... ... 
e
o
n
>>> 

另一种遍历方式:

>>> s=set('one')
>>> s
{'e', 'o', 'n'}
>>> for idex,i in enumerate(s):
		print (idex,i)
... ... 
0 e
1 o
2 n
>>> 

  变量idex表示集合中元素i的索引。

集合其他方法

函数说明
len(s) set 的长度
x in s 测试 x 是否是 s 的成员
x not in s 测试 x 是否不是 s 的成员
s.issubset(t) 测试是否 s 中的每一个元素都在 t 中
s.issuperset(t) 测试是否 t 中的每一个元素都在 s 中
s.union(t) 返回一个新的 set 包含 s 和 t 中的每一个元素
s.intersection(t) 返回一个新的 set 包含 s 和 t 中的公共元素
s.difference(t) 返回一个新的 set 包含 s 中有但是 t 中没有的元素
s.symmetric_difference(t) 返回一个新的 set 包含 s 和 t 中不重复的元素
s.copy() 返回 set “s”的一个浅复制

集合的一些操作符

  既然是集合,那就会遵循集合的一些操作方法,如求交集、并集、差集等。

交集

  Python中求集合的交集使用的符号是“&”,返回连个集合的共同元素的集合,即集合的交集。

>>> st1 = set('python')
>>> st1
set(['h', 'o', 'n', 'p', 't', 'y'])
>>> st2 = set('htc')
>>> st2
set(['h', 'c', 't'])
>>> st1 & st2
set(['h', 't'])

并集(合集)

  Python中求集合的并集用的是符号“|”,返回的是两个集合所有的并去掉重复的元素的集合。

>>> st1
set(['h', 'o', 'n', 'p', 't', 'y'])
>>> st3 = set('two')
>>> st3
set(['o', 't', 'w'])
>>> st1 | st3
set(['p', 't', 'w', 'y', 'h', 'o', 'n'])

差集

  Python中差集使用的符号是减号“-”。

>>> st1
set(['1', '3', '2', '5', '4', '7', '6'])
>>> st2 = set('4589')
>>> st2
set(['9', '8', '5', '4'])
>>> st1 - st2
set(['1', '3', '2', '7', '6'])

  返回的结果是在集合st1中但不在集合st2中的元素的集合。

集合的不同

  查看两个集合的不同之处,使用的difference函数,等价于差集。如:
  **s1.difference(s3) **
  这种不同指的是集合s3相对于集合s1,不同的地方,也就是所有在集合s1中,而不再集合s2中的的元素组成的新集合。

>>> s1
set([1, 2, 3, 4, 5])
>>> s2
set([1, 2, 3, 4])
>>> s1.difference(s2)
set([5])
>>> s3
set(['1', '8', '9', '5'])
>>> s1.difference(s3)
set([1, 2, 3, 4, 5])

集合的范围判断

  集合可以使用大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、等于(==)、不等于(!=)来判断某个集合是否完全包含于另一个集合,也可以使用子父集判断函数。

 定义三个集合s1,s2,s3:

>>> s1=set([1, 2, 3, 4, 5])
>>> s2=set([1, 2, 3, 4])
>>> s3=set(['1', '8', '9', '5'])

大于(>)或大于等于(>=)

>>> s1 > s2
True
>>> s1 > s3
False
>>> s1 >= s2
True

  表示左边集合是否完全包含右边集合,如集合s1是否完全包含集合s2。

小于(<)或 小于等于(<=)

>>> s2 < s1
True
>>> s1 < s3
False
>>> s3 < s1
False

  表示左边的集合是否完全包含于右边的集合,如集合s1是否完全包含于集合s2。

等于(==)、不等于(!=)

>>> s1 == s2
False
>>> s2 == s3
False
>>> s1 != s2
True

  判断两个集合是否完全相同。

不可变集合frozenset

  Python中还有一种不可改变的集合,那就是frozenset,不像set集合,可以增加删除集合中的元素,该集合中的内容是不可改变的,类似于字符串、元组。

>>> f = frozenset()
>>> f
frozenset([])
>>> f = frozenset('asdf')
>>> f
frozenset(['a', 's', 'd', 'f'])
>>> f = frozenset([1,2,3,4])
>>> f
frozenset([1, 2, 3, 4])
>>> f = frozenset((1,2,3,4))
>>> f
frozenset([1, 2, 3, 4])
>>> f = frozenset({1:2, 'a':2, 'c':3})
>>> f
frozenset(['a', 1, 'c'])

  如果试图改变不可变集合中的元素,就会报AttributeError错误。
  不可变集合,除了内容不能更改外,其他功能及操作跟可变集合set一样。

标签:set,Python,s2,s1,元素,s3,详解,集合
From: https://www.cnblogs.com/douke-of-mi/p/17529522.html

相关文章

  • Unity 在AssetPostprocessor内使用AssetDataBase是不安全的行为(尤其在Build前进行Lib
    https://docs.unity3d.com/Manual/AssetDatabaseCustomizingWorkflow.html在Build前进行Library的删除,读取Asset是不安全的行为,需要使用C#的IOSystem进行操作AssetImportOrderIfyouarescriptingusingtheAssetDatabaseclass,it’simportanttounderstandhowtheor......
  • 交换机的四大功能,详解
    交换机的四大功能我们通过实验来表示:如图所示配置好各pc的ip地址和子网掩码。这里在同一网段就不用配置网关了        <Huawei>这里带<>是用户视图只能查看,保存这里我们输入sys进入系统视图编辑 这里dismac-address是查看mac地址表的意识,可以看......
  • python字符串
    1.字符串函数name="jamesjacKSON"name.title()#字符串首字母大写,其余字母变小写name.upper()name.lower()2.在字符串中使用变量-f字符串(Python3.6引入的)first_name="ada"last_name="lovelace"full_name=f"{first_name}{last_name}"print(f......
  • 记录 python request ProxyError报错
    【出自】:https://zhuanlan.zhihu.com/p/350015032  侵删 解决办法:在原报错环境中使用下面命令重装低版本 urllib3:pipinstallurllib3==1.25.11 问题根源先查了一下 urllib3 的更新日志,应该是 1.26.0 的修改导致的:  按照这个更新日志,明明应该是增加了 HT......
  • SpringMVC框架详解:模型+核心组件+实现原理等详解
     MVC模型SpringMVC基于MVC模式,因此理解SpringMVC需要先对MVC模式有所了解。MVC是model、view、和controller的缩写,是软件开发中一种常用的架构模式。MVC各部分根据职责进行分离,使程序的结构更为直观,增加了程序的可扩展性、可维护性、可复用性。可以用如下的图形来......
  • python基础day38 并发编程
    进程概念进程、线程都是操作系统中的基本概念,也就是说进程和线程都是操作系统层面的东西,专业术语表达就是进程和线程都是由操作系统来调度的,而不是由我们程序员自己来操控的。在操作系统这门课里面,进程和线程是操作系统的概念,协程不是操作系统中的概念,而是我们程序员层面的协程......
  • python之x-mind中的测试用例内容转excel
    注意:导包xlwt生成的excel的文件后缀只能是xls,用xlsx打开文件会报错一、文件格式1.x-mind用例格式,若觉得字段太多可在代码中缩减 2.转后的excel格式 二、脚本(原贴:caituotuo.top/c2d10f21.html)修改最下面文件路径即可用importxlwtfromxmindparserimportxmind_to_dic......
  • textView调用setText但是显示的文本没变化
    甚至其他的textView都可以修改,只有他不行,我也不知道怎么点出了一个viewbinding的文件中的相同id,发现有一个相同id,但是并不是我要修改的那个textView是final,于是我把我要修改textView的id修改之后,就可以了估计是id重复导致的冲突吧,但是我在查找id重复的资料,似乎都说在不同文件......
  • python批量自动化工作
    将下述内容批量转换成指定的格式复仇之魂,众神之王,魅惑魔女,变体精灵,水晶室女,流浪剑客,娜伽海妖,撼地神牛,隐形刺客,秀豆魔导师,熊德,剑圣月之骑士,矮人火枪手,巨魔战将,暗影萨满,钢背兽,熊猫酒仙,半人马酋长,赏金猎人,龙骑士,敌法师,黑暗游侠,全能骑士,沉默术士,树精卫士,谜团,光之守卫,熊战士,食......
  • python基础 进程、操作系统调度算法、同步异步、开启进程、process类的参数、进程锁、
    进程概念进程、线程都是操作系统中的基本概念,也就是说进程和线程都是操作系统层的东西,专业术语表达就是进程和线程的使用都是由操作系统来调度的‘,而不是由我们来操控的。在操作系统这门课里,进程和线程是操作系统的概念,协程不是操作系统中的概念,而是我们程序层面的......