版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
内容导读在Python中,复杂数据类型是指由简单数据类型(整数、字符串等)组合或嵌套而成的数据结构,用于组织和管理更复杂的数据。Python中的复杂数据类型包括列表(list)、元组(tuple)、字典、集合等,本章将对此进行介绍。目录Contents4.1列表4.2元组4.3集合4.4字典4.5拓展练习4.1.1列表的创建和删除在Python3中,列表可以通过多种方式创建,常见的包括通过[]直接创建、通过list()函数创建以及通过range()函数创建数值列表等。1.使用[]创建列表列表可以直接通过方括号“[]”创建,其中的元素通过逗号分隔。list1=[]#创建一个空列表list2=["Python","Java","C"]#元素都是字符串类型list3=[3,8,15,21]#元素都是数值类型list4=[20,"hello",False,3.6]#元素为混合类型list5=[[2,5,8],["a","b","c"]]#元素为嵌套列表4.1.1列表的创建和删除2.通过list()函数创建列表list()函数可以将其他可迭代对象(如元组、字符串、集合等)转换为列表。具体示例如下:>>>list1=list()#创建空列表>>>print(list1)[]>>>list2=list("Python")#将字符串转换成列表>>>print(list2)['P','y','t','h','o','n']4.1.1列表的创建和删除3.通过range()函数创建数值列表通过range()函数可以很方便的创建数值列表,这在实际开发中很常见。range()函数的语法格式如下:range([start,]end[,step])4.1.1列表的创建和删除4.推导式生成列表使用列表推导式可以非常方便的创建列表,这是Python程序开发时最常用的技术。列表推导式的语法格式如下:[表达式for迭代变量in可迭代对象[if条件表达式]]4.1.1列表的创建和删除if条件表达式是可选的,只有满足条件的元素才会被包含到最后的列表中。例如:(1)生成一个包含1到10的平方的列表>>>squares=[x**2forxinrange(1,11)]>>>squares[1,4,9,16,25,36,49,64,81,100](2)生成一个包含1到10之间所有偶数的列表>>>even_numbers=[xforxinrange(1,11)ifx%2==0]>>>even_numbers[2,4,6,8,10]4.1.1列表的创建和删除(3)使用列表推导式实现嵌套列表的平铺>>>matrix=[[1,2,3],[4,5,6],[7,8,9]]>>>flattened=[xforrowinmatrixforxinrow]>>>flattened[1,2,3,4,5,6,7,8,9]4.1.1列表的创建和删除5. 列表的删除当不再使用一个列表时,可以使用del命令删除整个列表,如果列表对象所指向的值不再有其他对象指向,Python将同时删除其值。例如:>>>zzuli=["为之则易","不为则难"]>>>delzzuli>>>zzuliTraceback(mostrecentcalllast):File"<pyshell#11>",line1,in<module>zzuliNameError:name'zzuli'isnotdefined4.1.2列表元素访问和计数列表中的每一个元素都对应一个位置编号,称为元素的索引,列表通过索引来访问元素,其语法格式如下:列表名[索引值]4.1.2列表元素访问和计数1.通过索引直接访问可以通过索引直接访问列表中的元素。索引的区间在[0,列表长度-1]这个范围,超过这个范围则会抛出下标越界异常。>>>my_list=['apple','banana','cherry','date']>>>my_list[2]'cherry'>>>my_list[4]Traceback(mostrecentcalllast):File"<pyshell#14>",line1,in<module>my_list[4]IndexError:listindexoutofrange4.1.2列表元素访问和计数2.使用index()获取指定元素在列表中首次出现的下标可以使用列表对象的index()方法来获取指定元素首次出现的位置,语法格式如下:index(value,[start,[end]])其中,start和end指定了搜索的范围,start默认为0,end默认为列表长度。若列表中不存在指定元素,则抛出异常。>>>a=[10,0,30,40,60,20,30,50,30]>>>a.index(20)5>>>a.index(20,3)#从索引3开始往后搜索的第一个20出现的位置54.1.2列表元素访问和计数>>>a.index(30,5,7)#从索引5到7这个区间,元素30第一次出现的位置6>>>a.index(70)#列表中不存在70,抛出异常Traceback(mostrecentcalllast):File"<pyshell#8>",line1,in<module>a.index(70)ValueError:70isnotinlist4.1.2列表元素访问和计数3.获取指定元素出现的次数可以使用列表对象的count()方法返回指定元素在列表中出现的次数。例如:>>>list=[10,0,30,40,60,20,30,50,30]>>>list.count(20)1>>>list.count(5)04.1.3列表中元素的编辑操作当列表增加和删除元素时,列表会自动进行内存管理,大大减少了程序员的负担。但这个特点涉及列表元素的大量移动,效率较低。1.列表元素的增加Python主要提供了五种添加元素的方法。(1)append()方法使用append()方法,原地修改列表,是真正意义上的在列表尾部追加元素,速度最快,推荐使用。>>>list=[70,120]>>>list.append(50)>>>list[70,120,50]4.1.3列表中元素的编辑操作(2)extend()方法列表对象的extend()方法可以将一个列表中的全部元素添加到另一个列表中,属于原地操作,不创建新的对象。>>>list1=[3,6,9,10]>>>list2=[4,7,16]>>>id(list1)2208692684224>>>list1.extend(list2)>>>list1[3,6,9,10,4,7,16]>>>id(list1)22086926842244.1.3列表中元素的编辑操作(3)insert()方法使用insert()方法可以将指定的元素插入到列表对象的任意指定位置。这样会让插入位置后面所有的元素进行移动,影响处理速度。涉及大量元素时,尽量避免使用。>>>list=[0,16,27]>>>list.insert(3,36)>>>list[0,16,27,36]4.1.3列表中元素的编辑操作(4)“+”运算符可以使用“+”运算符把元素添加到列表中。这种方式并不是真正的在尾部添加元素,而是创建新的列表对象。>>>list=[12,37]>>>id(list)2208735459712>>>list=list+[16]>>>list[12,37,16]>>>id(list)22087353841924.1.3列表中元素的编辑操作(5)乘法扩展使用*运算,可以生成一个新列表,新列表元素是原列表元素的多次重复。>>>list1=[2,3,7]>>>list2=list1*2>>>list2[2,3,7,2,3,7]4.1.3列表中元素的编辑操作2.列表元素的删除删除元素主要有两种方式,一种是根据索引删除,一种是根据元素值删除。(1)根据索引删除删除列表中的指定元素和删除列表类似,也可以使用del语句实现。>>>list=[0,2,3,4,7,9]>>>dellist[2]>>>list[0,2,4,7,9]>>>dellist[-2]>>>list[0,2,4,9]4.1.3列表中元素的编辑操作(2)根据元素值删除remove()方法用于删除列表对象中第一个匹配的指定元素,若指定元素不存在则抛出异常。>>>list=[13,17,32,23,29,41]>>>list.remove(32)>>>list[13,17,23,29,41]>>>list.remove(50)Traceback(mostrecentcalllast):File"<pyshell#49>",line1,in<module>list.remove(50)ValueError:list.remove(x):xnotinlist4.1.3列表中元素的编辑操作3.列表元素的修改修改列表中的元素只需要通过索引获取该元素,再为其重新赋值即可。>>>list=[13,16,45,31]>>>list[2]=12>>>list[13,16,12,31]4.1.3列表中元素的编辑操作4.求列表中元素的个数求列表中元素的个数可以通过len()函数实现。>>>list=[1,2,3,4,5,6]>>>len(list)64.1.3列表中元素的编辑操作5.判断指定元素是否在列表中使用in关键字可以直接检查元素是否存在,返回布尔值True或False。>>>list=[1,2,"apple",3.14,"banana"]>>>"orange"inlistFalse>>>"orange"notinlistTrue4.1.4列表遍历列表遍历是一种常见操作,在该过程中可以实现数据处理、条件筛选、数据聚合等功能。Python中提供了多种遍历列表的方法,常用的包括以下两种。1.直接使用for循环遍历语法格式如下:foriteminlistname:print(item)4.1.4列表遍历2.使用enumerate()函数实现enumerate()是Python的内置函数,通过它可以列举出序列中的数,返回索引序号和对应的元素。其语法格式如下:enumerate(iterable,start=0)4.1.5列表的排序在实际开发中,经常需要对列表种的元素进行排序,这可以通过Python提供的内置函数sort()方法来实现,该方法对列表进行原地排序,不会生成新的列表对象。其语法格式如下:list.sort(key=None,reverse=False)其中,list表示要排序的列表,参数key可选,用于指定一个函数,该函数应该返回一个可以用来比较的值,默认情况下,sort()使用元素的自然顺序进行排序。reverse这也是一个可选参数,如果设置为True,那么列表会被降序排序;如果设置为False(默认值),那么列表会被升序排序。4.1.6切片操作切片是Python序列的重要操作之一,适用于列表、元组、字符串、range对象等类型。切片操作可以从序列中截取部分元素组成新的序列,且不会使原序列发生变化,还可以使用切片来修改和删除列表中的部分元素,甚至可以通过切片操作为列表对象增加元素。基本语法如下:sequence[start:stop:step]其中,sequence是要进行切片操作的序列对象;start是切片的起始索引(包含),如果省略则默认为0;stop是切片的结束索引(不包含),如果省略则默认为序列的长度;step是切片的步长,如果省略则默认为1。另外,切片操作不会因为下标越界产生异常,而是简单地在列表末尾截断或者返回一个空列表。目录Contents4.1列表4.2元组关注微信公众号DSSF007,回复关键字“清华电脑学堂”获取更多资源4.3集合4.4字典4.5拓展练习4.2.1元组的创建和删除1.使用()直接创建元组创建元组和创建列表的方法相似,使用圆括号就可以创建元组,只需要在圆括号中添加元素,元素间使用逗号分隔,也可以省略圆括号。>>>atuple=(1,'hello',2)>>>atuple(1,'hello',2)>>>atuple=(1)>>>type(atuple)<class'int'>4.2.1元组的创建和删除>>>atuple=(1,)>>>type(atuple)<class'tuple'>>>>atuple=1,2,3>>>atuple(1,2,3)4.2.1元组的创建和删除2.通过tuple()创建元组通过列表的创建可知,list()可以接收元组、字符串、其他序列类型、迭代器等生成列表,而tuple()可以接收列表、字符串、其他序列类型、迭代器等生成元组,语法格式如下:tuple(可迭代对象)4.2.1元组的创建和删除例如:>>>a=tuple()#创建一个空元组>>>a=tuple('abc')#把字符串转换为元组>>>a('a','b','c')>>>a=tuple(range(5))#把range()函数循环出来的结果转换为数值元组>>>a(0,1,2,3,4)>>>a=tuple([1,2,3])#把列表转换为元组>>>a(1,2,3)4.2.1元组的创建和删除3.删除元组元组中的元素值不允许删除,但对于已经存在的元组,可以使用del语句将其整个删除,语法格式如下:其中,tuplename表示要删除的元组名。4.2.2元组的元素访问在Python中对元组遍历最常见的就是输出元素内容,直接使用print()函数即可。例如:>>>a=('苏轼','苏洵','王阳明','章衡')>>>print(a)('苏轼','苏洵','王阳明','章衡')4.2.3元组的排序在Python中,元组是不可变序列,无法像列表一样直接原地排序,但可以通过内置函数sorted(tupleObj),生成新的列表对象。例如:>>>a=(17,8,26,3,9)>>>b=sorted(a)>>>b[3,8,9,17,26]4.2.4序列解包Python中的序列解包(sequenceunpacking)是一种强大且便捷的功能,可以将一个序列(如列表、元组、字符串等)中的元素分别赋值给多个变量,这在处理具有固定数量元素的序列时特别有用,可以使程序更加简洁和易读。以下是序列解包的一些基本示例。(1)元组解包>>>t=(1,2,3)#定义一个元组>>>a,b,c=t#解包元组到单独的变量>>>a1>>>b2>>>c34.2.4序列解包(2)列表解包>>>list=[4,5,6]#定义一个列表>>>x,y,z=list#解包列表到单独的变量>>>x4>>>y5>>>z64.2.5生成器推导式列表推导式直接生成列表对象,生成器推导式生成的不是列表也不是元组,而是一个生成器对象。我们可以通过生成器对象,转化成列表或者元组,也可以使用生成器对象的__next__()方法进行遍历,或者直接作为迭代器对象来使用。>>>t=(x**2forxinrange(6))>>>t<generatorobject<genexpr>at0x0000019D453B2A80>>>>tuple(t)(0,1,4,9,16,25)>>>t4.2.5生成器推导式<generatorobject<genexpr>at0x0000019D453B2A80>>>>tuple(t)()>>>t=(x**2forxinrange(6))>>>t.__next__()0>>>t.__next__()1>>>t.__next__()4目录Contents4.1列表4.2元组关注微信公众号DSSF007,回复关键字“清华电脑学堂”获取更多资源4.3集合4.4字典4.5拓展练习4.3.1集合的创建和删除1.集合的创建创建集合主要有两种方法:(1)使用{}创建集合,并使用add()方法添加元素>>>s={8,12,33}>>>s{8,33,12}>>>s.add(6)>>>s{8,33,12,6}4.3.1集合的创建和删除(2)使用set()函数,将列表、元组等可迭代对象转成集合>>>list1=[4,10,17]>>>s=set(list1)>>>s{17,10,4}>>>t1=(2,2,4,5,5)>>>s1=set(t1)>>>s1{2,4,5}4.3.1集合的创建和删除2.集合的删除(1)使用del命令删除集合对象>>>s={3,6,8,10}>>>dels>>>sTraceback(mostrecentcalllast):File"<pyshell#50>",line1,in<module>sNameError:name's'isnotdefined.Didyoumean:'s1'?4.3.1集合的创建和删除(2)用集合的remove()方法删除指定元素,用clear()方法清空集合中所有元素>>>s={6,8,17,24}>>>s.remove(6)>>>s{8,17,24}>>>s.clear()>>>sset()4.3.2集合的运算集合最常见的运算是求并集、差集、交集等运算,结合数学中集合的概念,这些运算是很容易被理解的。例如:>>>s1={1,2,3,4}>>>s2={3,4,5,6}>>>s3=s1-s2>>>s3{1,2}>>>s4=s1|s2>>>s4{1,2,3,4,5,6}4.3.2集合的运算>>>s5=s1&s2>>>s5{3,4}>>>s6=s1^s2>>>s6{1,2,5,6}>>>s1|=s2>>>s1{1,2,3,4,5,6}目录Contents4.1列表4.2元组关注微信公众号DSSF007,回复关键字“清华电脑学堂”获取更多资源4.3集合4.4字典4.5拓展练习4.4.1字典的创建和删除创建字典就是创建键与值之间的关联。在Python中可以使用大括号{}或dict()创建字典1.通过{}来创建字典对象>>>p1={'name':'zhangsan','age':18,'hobby':'sing'}>>>p2={}#空的字典对象>>>p1{'name':'zhangsan','age':18,'hobby':'sing'}4.4.1字典的创建和删除2.通过内置函数dict()创建字典对象>>>p3=dict(name="linyi",age=28,city="chengdu")>>>p3{'name':'linyi','age':28,'city':'chengdu'}>>>p4=dict()#空的字典对象>>>p4{}4.4.1字典的创建和删除3.字典的删除当不再需要某个字典对象时,可以使用del命令删除整个字典,比如要删除上面创建的字典对象p1,可以使用如下代码:>>>delp1>>>p1#p已经被删除,再访问的话会报错Traceback(mostrecentcalllast):File"<pyshell#8>",line1,in<module>p1NameError:name'p1'isnotdefined.Didyoumean:'p3'?4.4.2字典元素的访问有多种方式可以对字典中的元素进行访问,为了演示方便,此处假定一个字典对象:1.通过‘键’获得‘值’与列表和元组类似,可以使用下表的方式来访问字典中的元素,但不同的是字典的下标是字典的‘键’,若指定的‘键’不存在则抛出异常。>>>p1['name']'zhangsan'>>>p1['sex']Traceback(mostrecentcalllast):File"<pyshell#11>",line1,in<module>p1['sex']KeyError:'sex'4.4.2字典元素的访问2.通过字典对象的get()方法获取指定‘键’对应的‘值’这是更加安全的字典元素访问方式,若指定键不存在,返回None;也可以设定指定键不存在时默认返回的对象,推荐使用>>>p1.get('name')'zhangsan'>>>p1.get('sex')>>>p1.get('sex','男')'男'4.4.2字典元素的访问3.列出字典中所有“键-值对”使用字典的items()方法可以返回字典的“键-值对”列表,例如:>>p1.items()dict_items([('name','zhangsan'),('age',18),('hobby','sing')])4.列出所有“键”和所有的“值”使用字典的keys()方法可以返回字典的“键”列表,使用字典的values()方法可以返回字典的所有“值”列表,例如:>>>p1.keys()dict_keys(['name','age','hobby'])>>>p1.values()dict_values(['zhangsan',18,'sing'])4.4.2字典元素的访问5.返回字典中“键-值对”的个数可以使用len()函数来获取字典中键值对的数量:>>>len(p1)36.检测一个指定的“键”是否在字典中可以使用`in`关键字来检查字典中是否存在某个键:>>>'name'inp1True>>>'sex'inp1False4.4.3字典元素的添加、修改和删除1.给字典新增键值对当以指定键为下标给字典元素赋值时,若该键存在,则表示修改该键的值;若不存在,则表示添加一个新的键值对到字典中。>>>p1['age']=20#修改键'age'的值>>>p1{'name':'zhangsan','age':20,'hobby':'sing'}>>>p1['sex']='男'#字典中不存在键'sex',添加'sex':'男'键值对>>>p1{'name':'zhangsan','age':20,'hobby':'sing','sex':'男'}4.4.3字典元素的添加、修改和删除2.使用字典对象的update()方法添加或者更新元素使用字典对象的update()方法可以将另一个字典的键值对一次性全部添加到当前字典对象中,如果两个字典中存在相同的键,则以另一个字典中的值为准对当前字典进行更新。>>>p1={'name':'zhangsan','age':18,'hobby':'sing'}>>>p2={'name':'lisi','school':'zzuli'}>>>
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 感恩教育主题班会课件
- 2026中国无人驾驶汽车技术路线与商业化前景报告
- 2026汽车零部件制造行业发展趋势研究与发展战略与供应链优化
- 中华人民共和国信托法考核试题及答案
- 2026中国水能化工行业市场现状供需分析及投资评估规划分析研究报告
- 2026中国智能机器人行业企业管理及市场竞争分析研究报告
- 2026中国自适应光学成像系统行业市场发展趋势与前景展望战略研究报告
- 2026中国涡流泵行业用户需求预测与产品规划报告
- 2026中国物联网传感器应用领域技术创新扩散模式分析市场需求调研报告
- 2026汽车制造业行业市场现状供需分析及投资评估规划分析研究报告
- 2026年秋季初中开学第一课 行为规范 青春有规
- 《医疗器械经营质量管理规范》培训试题及答案
- 2026年金融科技产品推广方案
- 成都市新都区2026年社区网格员招录考试真题库及完整答案
- 城市更新项目策划与实施方案
- 湖南省长沙市望城区2027届六年级数学第一学期期末联考试题含解析
- 2026统考专升本高数:高数Ⅰ考点汇编
- 校长竞聘面试答辩题及答案(精心)
- 2025年特殊教育学校教师招聘笔试试题及答案
- 2026-2027年人工智能(AI)驱动的个性化国际税务筹划与合规风险预警平台适应全球税收规则变化获金融与法律科技投资
- 2026一级建造师《机电》必背知识点
评论
0/150
提交评论