外婆都能学会的Python教程(十四):Python集合类型(一)
bigegpt 2024-12-31 09:32 6 浏览
前言
Python是一个非常容易上手的编程语言,它的语法简单,而且功能强大,非常适合初学者学习,它的语法规则非常简单,只要按照规则写出代码,Python解释器就可以执行。
下面是Python的入门教程集合类型的例子,太简单了,外婆看完都学会了,你也来看看吧!
集合类型的定义
- 集合是多个元素的无序组合,与数学中的集合概念一致,相当于java中的set。
- 集合类型的特点集合中元素是无序的,每个元素必须是唯一的,不能重复集合中的元素必须是不可变的,不能修改,如果修改了有可能会和其他元素相同。
- 集合用{}表示,元素之间用逗号分隔建立集合类型用{}或set(),如果用{}建立集合,如果集合中只有一个元素,必须在元素后面加逗号。
- 空集合只能用set()建立,不能用{}集合中的元素没有顺序,不能通过下标访问元素。
- 代码演示
A = {"python", 123, ("python", 123)} # 建立集合
print(A) # {'python', 123, ('python', 123)}
B = set("pypy123") # 建立集合
print(B) # {'p', 'y', '1', '2', '3'} # 集合中的元素是无序的,不重复的
集合应用场景
- 包含关系比较
- 数据去重
- 数据交集、差集、并集、补集等运算
集合类型的操作
- 成员关系操作符:in、not in
- 集合运算操作符:|、&、-、^
- S|T 并集:返回一个新集合,包含在集合S和T中所有元素
- S&T 交集:返回一个新集合,包含同时在S和T两个集合中出现的元素
- S-T 差集:返回一个新集合,包含在S集合中出现但不在T集合中出现的元素
- S^T 补集:返回一个新集合,包含集合S和T中的非相同元素
- S<=T 或 S<T 判断S和T的子集关系,返回True/False
- S>=T 或 S>T 判断S和T的包含关系,返回True/False
- 四个增强操作
- S|=T 或 S.update(T):将T中的元素添加到S中
- S&=T 或 S.intersection_update(T):将S中的元素与T中的元素更新到S中
- S-=T 或 S.difference_update(T):将S中的元素与T中的元素差集更新到S中
- S^=T 或 S.symmetric_difference_update(T):将S中的元素与T中的元素补集更新到S中
- 实例演示
A = {'p', 'y', 123}
B = set("pypy123") # {'p', 'y', '1', '2', '3'}
print(A|B) # {'p', 'y', 123, '1', '2', '3'}
print(A&B) # {'p', 'y'}
print(A-B) # {123}
print(A^B) # {'1', '2', '3', 123}
print(A<=B) # False
print(A<B) # False
A.add('x') # 添加元素
print(A) # {'x', 123, 'p', 'y'}
- 集合类型的内置函数或方法
- len(s):返回集合s的长度
- max(s):返回集合s中元素最大值
- min(s):返回集合s中元素最小值
- set(seq):将其他类型的序列转换成集合类型
- s.add(x):如果x不在集合s中,将x增加到s
- s.clear():删除集合s中的所有元素
- s.copy():返回集合s的一个副本
- s.difference(t):返回集合s中有而集合t中没有的元素组成的新集合
- s.difference_update(t):返回集合s中有而集合t中没有的元素组成的新集合
- s.discard(x):如果x在集合s中,将x从s中删除
- s.intersection(t):返回集合s和t中共同元素组成的新集合
- s.intersection_update(t):返回集合s和t中共同元素组成的新集合
- s.isdisjoint(t):判断集合s和t是否不相交,如果不相交返回True,否则返回False
- s.issubset(t):判断集合s是否为集合t的子集,如果是返回True,否则返回False
- s.issuperset(t):判断集合s是否为集合t的超集,如果是返回True,否则返回False
- s.pop():从集合s中随机删除一个元素,并返回该元素
- s.remove(x):从集合s中删除元素x,如果x不存在,抛出KeyError异常
- s.symmetric_difference(t):返回集合s和t中不重复的元素组成的
- for循环遍历集合
A = {'p', 'y', 123}
for item in A:
print(item)
- while循环遍历集合
try:
while True:
print(A.pop(), end='')
except:
pass
序列类型
- 序列类型是Python中最基本的数据结构,具有先后关系的一组元素。
- 序列中的每个元素都有编号,即元素的位置,也称为索引,第一个元素的索引为0,第二个元素的索引为1,以此类推。
- 序列类型包括字符串、列表、元组、range对象、bytes对象和bytearray对象。
序列类型的通及操作
- 成员关系操作符:in、not inx in s:如果x是序列s的元素,返回True,否则返回Falsex not in s:如果x不是序列s的元素,返回True,否则返回False
- 序列连接操作符:+,意思是将两个序列连接成一个序列
- 序列重复操作符:*,意思是将序列重复n次,生成一个新的序列
- 切片操作符:[start:end:step],意思是从序列中获取第start到end-1个元素,每step个取一个元素
- 例子
ls = ["python", 123, "abc"]
print("python" in ls) # True, 判断python是否在列表中
print("python" not in ls) # False, 判断python是否不在列表中
print(ls + [456]) # ['python', 123, 'abc', 456], 连接列表
print(ls * 2) # ['python', 123, 'abc', 'python', 123, 'abc'], 列表重复2次
print(ls[1:]) # [123, 'abc'], 列表切片
序列类型的内置函数
- len(s):返回序列s的长度
- max(s):返回序列s中元素最大值,其中元素必须是同一类型,并且可比较
- min(s):返回序列s中元素最小值,其中元素必须是同一类型,并且可比较
- seq(seq):将其他类型的序列转换成序列类型
- list(seq):将其他类型的序列转换成列表类型
- tuple(seq):将其他类型的序列转换成元组类型
- str(seq):将其他类型的序列转换成字符串类型
- bytes(seq):将其他类型的序列转换成bytes类型
- bytearray(seq):将其他类型的序列转换成bytearray类型
- range(start, stop[, step]):创建一个range对象,一般用于for循环中
- reversed(seq):反向序列中的元素,返回一个迭代器
- sorted(seq):对序列进行排序,返回一个新的序列
- zip(seq1, seq2, ...):将序列seq1, seq2, ...中对应的元素打包成一个元组,返回一个zip对象
- filter(function, seq):过滤掉不符合条件的元素,返回一个filter对象
- map(function, seq):根据提供的函数对指定序列做映射,返回一个map对象
- reduce(function, seq):对参数序列中元素进行累积,返回一个值
- index(x[, start[, end]]):从序列中找出某个值第一个匹配项的索引位置
- count(x):统计某个元素在序列中出现的次数
- 例子
ls = ["python", 123, "abc"]
print(len(ls)) # 3, 列表长度
print(max(ls)) # TypeError: '>' not supported between instances of 'int' and 'str', 列表中元素类型不一致,不能比较大小
print(min(ls)) # TypeError: '<' not supported between instances of 'int' and 'str', 列表中元素类型不一致,不能比较大小
print(list(ls)) # ['python', 123, 'abc'], 将列表转换成列表
print(tuple(ls)) # ('python', 123, 'abc'), 将列表转换成元组
print(str(ls)) # ['python', 123, 'abc'], 将列表转换成字符串
print(bytes(ls)) # TypeError: 'str' object cannot be interpreted as an integer, 字符串不能转换成bytes
print(bytearray(ls)) # TypeError: 'str' object cannot be interpreted as an integer, 字符串不能转换成bytearray
print(range(10)) # range(0, 10), 创建一个range对象
print(reversed(ls)) # <list_reverseiterator object at 0x000001F3F3F4F7C0>, 反向序列中的元素,返回一个迭代器
print(sorted(ls)) # TypeError: '<' not supported between instances of 'int' and 'str', 列表中元素类型不一致,不能比较大小
print(zip(ls, [1, 2, 3])) # <zip object at 0x000001F3F3F4F700>, 将列表中元素和[1, 2, 3]中元素打包成元组
print(filter(lambda x: x == "python", ls)) # <filter object at 0x000001F3F3F4F7C0>, 过滤掉不符合条件的元素,返回一个filter对象
print(map(lambda x: x == "python", ls)) # <map object at 0x000001F3F3F4F7C0>, 根据提供的函数对指定序列做映射,返回一个map对象
print(ls.index("python")) # 0, 从序列中找出某个值第一个匹配项的索引位置
print(ls.count("python")) # 1, 统计某个元素在序列中出现的次数
结束寄语
Python中的集合类型在日常开发中使用非常频繁,掌握集合的使用在编程中会让你事半功倍。
恭喜你看完这篇Python教程,你已经超过99%的人了,关注我带你快速入门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#...
- 一周热门
- 最近发表
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- resize函数 (64)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- mybatis大于等于 (64)
- xcode-select (66)
- mysql授权 (74)
- 下载测试 (70)
- linuxlink (65)
- pythonwget (67)
- androidinclude (65)
- logstashinput (65)
- hadoop端口 (65)
- vue阻止冒泡 (67)
- oracle时间戳转换日期 (64)
- jquery跨域 (68)
- php写入文件 (73)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)