百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

「Python」(八)Python中的set集合(每个人都是唯一的个体)

bigegpt 2024-12-31 09:32 4 浏览

您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦本文主要介绍Python数据类型中的集合(set和frozenset),咱们一次把集合聊个透彻。
干货满满,建议收藏,需要用到时常看看。 小伙伴们如有问题及需要欢迎私信或者留言给我哦~ ~ ~。

集合是什么?

集合是什么呢?相信读者朋友们哪怕是没有用过集合这个数据类型。也一定在数学课堂上听过集合这个名词。数学中的集合是一个基本概念,说白了一堆不重复的数字可以组成一个集合。回到Python中集合的数据类型,它可以用来存放多个不重复的数据,并且这些数据的数据类型是不可变类型。这些不可变类型包括数字,字符串,元组。也就是说可变的数据类型如列表,字典是不能作为集合的元素的。Python中的集合分为两种,一种是set类型的集合,另一种是fronzenset类型的集合。这两种类型的集合的区别是:set集合可变,即可以添加,删除集合内部的元素,而fronzenset集合则不可变。即不能添加,删除集合内部的元素。set集合的定义是{element1,element2,...,elementn}, 其中,element1~elementn表示集合中的元素,个数没有限制。每个元素都是唯一的。

set集合怎么用?

创建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元素,也就是说在集合中值相同的元素只会存储一遍。

删除set集合

删除set集合可以通过del(setname)函数来删除,setname是要删除的set集合名称。

访问set集合元素

由于集合中的元素是无序的,因此五香向列表那样使用下标访问元素,Python中,访问集合元素最常用的方法是使用循环,将集合中的元素逐一读取出来。

set_demo = {'1', 2, ('码农', '飞哥')}
for value in set_demo:
    print(value)

运行结果是:

2
('码农', '飞哥')
1

元素的输出也是无序的。

删除集合中的元素

删除集合中的元素的方式有两种:第一种:通过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, ('码农', '飞哥')}

向集合中添加元素

通过add函数可以向集合中添加元素,其语法结构是:setname.add(element),其中setname是待操作的set集合,element是待添加的元素,只能添加不可变的元素,例如:数字,元组或者字符串,不能添加列表,字典,set集合这类可变的数据。举个例子:

set_demo.add('6')
print('添加元素6之后的结果是=', set_demo)

运行结果是:

添加元素6之后的结果是= {2, '6', ('码农', '飞哥')}

set集合的交并补

在数学中集合是有交集并集和补集的。Python中的集合也是有这些概念的。

交集

通过&连接两个set集合就能生成一个新的集合,新集合取两个原集合的公共元素。

并集

通过|连接两个set集合就能生成一个新的集合,新集合取两个原集合的全部元素。

差集

通过-连接两个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'})

总结

本文详细介绍了Python中set集合的基本概念和详细用法,希望对读者朋友们有所帮助。

好文推荐

【Python从入门到精通】(七)Python字典(dict)让人人都能找到自己的另一半(键值对,成双成对)【Python从入门到精通】(六)Python内置的数据类型-列表(list)和元组(tuple),九浅一深,十个章节,不信你用不到【Python从入门到精通】(五)Python内置的数据类型-序列和字符串,没有女友,不是保姆,只有拿来就能用的干货【Python从入门到精通】(四)Python的内置数据类型有哪些呢?数字了解一下

我是码农飞哥,再次感谢您读完本文。全网同名【码农飞哥】。不积跬步,无以至千里,享受分享的快乐 我是码农飞哥,再次感谢您读完本文

相关推荐

为3D手游打造, Visual Studio Unity扩展下载

IT之家(www.ithome.com):为3D手游打造,VisualStudioUnity扩展下载7月30日消息,微软正式发布升级版VisualStudioToolsforUnity扩...

由ArcMap属性字段自增引出字段计算器使用Python的技巧

1.前言前些日子有人问我ArcMap中要让某个字段的值实现自增有什么方法?我首先想到像SQLServer中对于数值型字段可以设置自增。所以我打开ArcCatalog查看发现只提供默认值,没办法只能看...

微软首次回答 HoloLens 相关问题,终于爆料了

fengo2015/04/2115:11注:本文作者张静是NVIDIAGPU架构师,微信公众号“黑客与画家”(HackerAndPainter),知乎专栏地址。欢迎各位童鞋与他交流探讨。...

C#指针的应用(c#指针类型)

C#在有限的范围内支持指针。C#的指针只不过是一个持有另一类型内存地址的变量。但是在C#中,指针只能被声明为持有值类型和数组的内存地址。与引用类型不同,指针类型不被默认的垃圾收集机制所跟踪。出于同...

C# 堆栈(Stack)(c# 堆栈中定位调用messagebox 的地方)

C#集合在C#中,堆栈(Stack)是一种后进先出(LIFO,LastInFirstOut)的数据结构。堆栈(Stack)适用于存储和按顺序处理数据,其中最新添加的元素会最先被移除。堆...

欢迎回来:Fortran意外重回流行编程语言20强榜单

TIOBE指数是用来确定一种编程语言受欢迎程度的指标之一。它并不表明哪种编程语言是最好的,也不表明哪种编程语言写的代码行数最多,而是利用在谷歌、维基百科、必应、亚马逊、YouTube等各种引擎和网站上...

C#+NET MAUI实现跨平台/终端(linux,win,ios等)解决方案

简介.NETMulti-platformAppUI(.NETMAUI)是一个跨平台的框架,用于使用C#和XAML创建移动和桌面应用程序。使用.NETMAUI,您可以用一套代码库开发可以在A...

C#代码安全红线:SQL注入防护终极方案,让你的系统固若金汤

在数字化时代,应用系统的安全性至关重要。而SQL注入攻击,长期盘踞在OWASP(OpenWebApplicationSecurityProject)漏洞榜单的前列,成为众多基于数据库的应用系统...

C# (一)状态机模式(状态机代码实现)

最近空闲,炒炒隔夜饭,以前这些模式在自己项目种应用过不少,但一直没有像别人那样写一个系列,最近年纪大了,很多东西都忘记了,特别AI的兴起,更少写代码了,反正没什么事情,自己在重写一遍吧。创建型模式(5...

C# 中 Predicate 详解(c#中的replace)

Predicate泛型委托:表示定义一组条件并确定指定对象是否符合这些条件的方法。此委托由Array和List类的几种方法使用,用于在集合中搜索元素。Predicate<T>...

C#中$的用法?(c#中&&什么意思)

文章来自AI问答。在C#中,$符号用于字符串插值(StringInterpolation)。字符串插值是C#6.0引入的一种特性,它允许你在字符串中直接嵌入表达式,而不需要使用string.For...

C#并行编程:Parallel类(c# 并行处理)

在Parallel类中提供了三个静态方法作为结构化并行的基本形式:Parallel.Invoke方法:并行执行一组委托。Parallel.For方法:执行与C#for循环等价的并行方法。Parall...

颠覆认知!用Span重构foreach循环竟让数据处理快如闪电

在C#编程的世界里,数据处理效率始终是开发者们关注的焦点。随着项目规模的扩大和数据量的激增,哪怕是细微的性能提升,都可能对整个应用的响应速度和用户体验产生深远影响。近年来,C#引入的Span<T...

Unity3D手游开发实践《腾讯桌球》客户端开发经验总结

本次分享总结,起源于腾讯桌球项目,但是不仅仅限于项目本身。虽然基于Unity3D,很多东西同样适用于Cocos。本文从以下10大点进行阐述:1.架构设计2.原生插件/平台交互3.版本与补丁4.用脚本,...

.NET 7 AOT 的使用以及 .NET 与 Go 互相调用

目录背景C#部分环境要求创建一个控制台项目体验AOT编译C#调用库函数减少体积C#导出函数C#调用C#生成的AOTGolang部分安装GCCGolang导出函数.NETC#...