详细介绍Python中的set集合
作者:码农飞哥 发布时间:2023-07-26 07:35:03
Python中的set集合
一、集合是什么?
集合是什么呢?相信读者朋友们哪怕是没有用过集合这个数据类型。也一定在数学课堂上听过集合这个名词。数学中的集合是一个基本概念,说白了一堆不重复的数字可以组成一个集合。回到Python中集合的数据类型,它可以用来存放多个不重复的数据,并且这些数据的数据类型是不可变类型。这些不可变类型包括数字,字符串,元组。也就是说可变的数据类型如列表,字典是不能作为集合的元素的。
Python中的集合分为两种,一种是set类型的集合,另一种是fronzenset类型的集合。这两种类型的集合的区别是:set集合可变,即可以添加,删除集合内部的元素,而fronzenset集合则不可变。即不能添加,删除集合内部的元素。
set集合的定义是{element1,element2,...,elementn
}, 其中,element1~elementn表示集合中的元素,个数没有限制。每个元素都是唯一的。
二、set集合怎么用?
1、创建set集合
创建set集合的方式有两种:
第一种:通过{}
方式创建,其语法格式是:{element1,element2,...,elementn}
第二种:通过set
函数, 其语法格式是:set(iterable
) 其中iterable
不传的话,则会创建一个空的set对象。传入的iterable必须是可以遍历的序列,例如字符串,列表等。举个例子:
set_demo = {'1', 2, ('码农', '飞哥')}
print(set_demo)
list = [1, 'test', 1, ('码农', '飞哥')]
print('列表list结果=', list)
set_demo1 = set(list)
print('生成的set结果=', set_demo1)
运行结果是:
{2, ('码农', '飞哥'), '1'}
列表list结果= [1, 'test', 1, ('码农', '飞哥')]
生成的set结果= {1, ('码农', '飞哥'), 'test'}
可以看到列表list中哪怕有两个1元素,但是生成set集合之后还是只有一个1元素,也就是说在集合中值相同的元素只会存储一遍。
2、删除set集合
删除set集合可以通过del(setname)函数来删除,setname是要删除的set集合名称。
3、访问set集合元素
由于集合中的元素是无序的,因此五香向列表那样使用下标访问元素,Python中,访问集合元素最常用的方法是使用循环,将集合中的元素逐一读取出来。
set_demo = {'1', 2, ('码农', '飞哥')}
for value in set_demo:
print(value)
运行结果是:
2
('码农', '飞哥')
1
元素的输出也是无序的。
4、删除集合中的元素
删除集合中的元素的方式有两种:
第一种:通过remove()方法,其语法结构是:setname.remove(element),其中,setname为待操作的set集合,element为需要删除的元素,如果删除失败的话则会报KeyError错误。
第二种:通过discard()方法,其使用跟remove()方法一致,只是如果删除元素失败的话不会报错。
set_demo = {'1', 2, ('码农', '飞哥')}
set_demo.remove('1')
print('删除元素1之后的集合=', set_demo)
set_demo.discard('5')
print('删除元素5之后的集合=', set_demo)
运行结果是:
删除元素1之后的集合= {2, ('码农', '飞哥')}
删除元素5之后的集合= {2, ('码农', '飞哥')}
5、向集合中添加元素
通过add函数可以向集合中添加元素,其语法结构是:setname.add(element),其中setname是待操作的set集合,element是待添加的元素,只能添加不可变的元素,例如:数字,元组或者字符串,不能添加列表,字典,set集合这类可变的数据。
举个例子:
set_demo.add('6')
print('添加元素6之后的结果是=', set_demo)
运行结果是:
添加元素6之后的结果是= {2, '6', ('码农', '飞哥')}
三、set集合的交并补
在数学中集合是有交集并集和补集的。Python中的集合也是有这些概念的。
1、交集
通过&
连接两个set集合就能生成一个新的集合,新集合取两个原集合的公共元素。
2、并集
通过|
连接两个set集合就能生成一个新的集合,新集合取两个原集合的全部元素。
3、差集
通过-
连接两个set集合就能生成一个新的集合,新集合取一个集合中有而另一个集合中没有的元素。
举个栗子:
set_demo = {1, 3, 5, 6}
set_demo1 = {2, 4, 6}
print("取交集的结果=", set_demo & set_demo1)
print("取并集的结果=", set_demo | set_demo1)
print("取差集的结果=", set_demo - set_demo1)
运行结果是
取交集的结果= {6}
取并集的结果= {1, 2, 3, 4, 5, 6}
取差集的结果= {1, 3, 5}
四、set中的其他方法
通过dir(set)可以查看set集合中的所有方法。一共有如下方法:
['__and__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__iand__', '__init__', '__init_subclass__', '__ior__', '__isub__', '__iter__', '__ixor__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__', 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update']
方法的命名比较规范,按照英文名都能猜测出方法的作用,在此就不在赘述每个方法的含义了。直接举例说明下:
set_demo = {1, 3, 5, 6}
set_demo1 = {2, 4, 6}
set_demo.update({12, (2, 3)})
print('set_demo调用update方法之后', set_demo)
set_demo = {1, 3, 5, 6}
print('set_demo调用union方法之后', set_demo.union(set_demo1))
print('set_demo调用difference方法之后', set_demo.difference(set_demo1))
print('set_demo调用__sub__方法之后', set_demo.__sub__(set_demo1))
运行结果是:
set_demo调用update方法之后 {1, 3, (2, 3), 5, 6, 12}
set_demo调用union方法之后 {1, 2, 3, 4, 5, 6}
set_demo调用difference方法之后 {1, 3, 5}
set_demo调用__sub__方法之后 {1, 3, 5}
五、frozenset 集合
frozenset集合是set集合的不可变版本,与set集合相比,frozenset集合中的元素不可变,也就是没有添加元素,删除元素的方法。
创建一个frozenset集合的方式是通过frozenset()方法。 其语法格式是:frozenset(iterable) 其中iterable不传的话,则会创建一个空的set对象。传入的iterable必须是可以遍历的序列,例如字符串,列表等。
frozenset_demo = frozenset(list)
print("frozenset_demo的类型是=", type(frozenset_demo))
print("frozenset_demo的结果=", frozenset_demo)
运行结果是:
frozenset_demo的类型是= <class 'frozenset'>
frozenset_demo的结果= frozenset({('码农', '飞哥'), 1, 'test'})
来源:https://blog.csdn.net/u014534808/article/details/118439186


猜你喜欢
- 用 docx 模块读取 Worddocx 安装cmd 中输入pip install python-docx 即可安装 docx 模块docx
- 使用PHP开发应用程序,尤其是网站程序,常常需要生成随机密码,如用户注册生成随机密码,用户重置密码也需要生成一个随机的密码。随机密码也就是一
- Golang中Array是值类型而slice是引用类型。因此两者之间的赋值或拷贝有些差异,本文带你了解各自的差异。1. 拷贝array前面提
- 今天做站时碰到个小问题:ASP正则获取文章内容图片地址,现在将此方法的思路拿出来分享下:Function RegExp_Execu
- Git 创建仓库本章节我们将为大家介绍如何创建一个 Git 仓库。你可以使用一个已经存在的目录作为Git仓库。git initGit 使用
- Bytes和Str的区别在Python3中,字符序列有两种类型:bytes和str。bytes类型是无符号的8位值(通常以ASCII码显式)
- 字节串bytes字节串也叫字节序列,是不可变的序列,存储以字节为单位的数据字节串表示方法:b"ABCD"b"\
- 我一直是使用mysql这个数据库软件,它工作比较稳定,效率也很高。在遇到严重性能问题时,一般都有这么几种可能:1、索引没有建好;2、sql写
- 由于实际需要,简要写了个小脚本,并打包生成exe,供无网络环境下使用脚本1:显示当前时间与时间戳,以及10分钟后的时间与时间戳# -*- c
- 在搭建springmvc框架时,底层使用hibernate4.1.8,数据库使用mysql5.1,使用hibernate自动生成数据库表时,
- 事物绝非十全十美总有强差人意的一面,之前针对浮动分析了其引起文本重影的怪异问题,而作为浮动布局的最佳搭档定位布局也存在一定的缺陷。围绕着定位
- 需求通过分析nginx访问日志,获取每个接口响应时间最大值、最小值、平均值及访问量。实现原理将nginx日志uriuriupstream_r
- 有时候我们会有这样的需求,需要把一些数据从别的库导入到另外的一个库中,而这些数据是用CSV文件存放的。对于MySql数据库我们有两种方式:一
- 我就废话不多说了,直接上代码吧!'''python对象销毁(垃圾回收)'''class Po
- 哎~工作忙死了!!!!!!今天在百度老年看到一个手写输入法,颇感新鲜。so把其框下!请不要用在商业用途,学习之用,版权百度所有。看代码!注:
- 前言pyquery是一个类似jquery的python库,它实现能够在xml文档中进行jQuery查询,pyquery使用lxml解析器进行
- 背景:在需求开发过程中,有的接口返回的结果中有很多字段需要展示到页面上。通常可以将这些字段在.vue文件中封装为计算属性,或者重新将对应字段
- 什么是接口接口是一种定义规范,规定了对象应该具有哪些方法,但并不指定这些方法的具体实现。在 Go 语言中,接口是由一组方法签名(方法名、参数
- 前言return语句用于退出函数,向调用方返回一个表达式。return在不带参数的情况下(或者没有写return语句),默认返回None。N
- 本文主要跟大家分享在类unix操作系统下supervisor的使用以及一些关于进程的知识一、问题背景1、背景如何才能让一个进程摆脱终端,获得