《Python程序设计基础》 课件第3章 Python 复杂数据类型_第1页
《Python程序设计基础》 课件第3章 Python 复杂数据类型_第2页
《Python程序设计基础》 课件第3章 Python 复杂数据类型_第3页
《Python程序设计基础》 课件第3章 Python 复杂数据类型_第4页
《Python程序设计基础》 课件第3章 Python 复杂数据类型_第5页
已阅读5页,还剩92页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章

Python

复杂数据类型列表字典元组集合与嵌套思维导图知识目标掌握掌握掌握熟练掌握列表的基本操作和方法12掌握元组的基本操作和方法了解集合与嵌套的基本操作4熟练掌握字典的基本操作和方法3技能目标掌握掌握掌握熟练掌握列表的编程应用12掌握元组的编程应用学会复杂数据的嵌套使用4熟练掌握字典的编程应用3思政目标1.

通过不同数据类型的对比分析,引导学生提升总结归纳能力和批判性思维养成。2.“民族品牌当自强”,理解创新驱动发展战略的深刻内涵。3.

通过“中国第一程序员求伯君—个人开发WPS击败200人的微软图”的学习,了解优秀程序员需要具备的品质。目录元组3.23.1列表3.3字典3.4集合与嵌套知识架构3.1列表1创建和访问列表2列表的基本操作3列表的函数和方法4学生实践练习3.1列表1

创建和访问列表

列表是一种有序的集合,可以随时添加和删除其中的元素,列表中值的切割可以用变量[头下标:尾下标]的方式,截取相应的列表,从左到右索引默认从0开始递增,从右到左索引默认从−1开始递减,下标可以为空,表示取到头或尾。1.创建列表列表名=[值1,值2,…,值N]例如,定义如下列表:list1=['Tom',786,2.23,'Trump',70.2]list2=[1,2,3,4,5]2.获取列表元素个数列表元素的个数使用len()函数实现,代码如下:len(list1)3.1列表1

创建和访问列表

3.访问列表元素1)

使用索引访问列表元素从左到右索引默认从0开始递增,从右到左索引默认从−1开始递减。例如,现有一个列表[a,b,c,d,e,f],其索引如图3.1所示。【示例3.1】从左往右顺序访问list1的5个元素。list1=['Tom',786,2.23,'Trump',70.2]print(list1[0],list1[1],list1[2],list1[3],list1[4])#输出5个元素3.1列表1

创建和访问列表

通过索引访问列表元素的运行结果如图所示。

除了从左往右访问列表元素,还可以从右往左访问,最后一个元素索引为−1。例如,在示例3.1中加入如下代码:#从最后一个元素开始,从右往左输出列表元素print(list1[-1],list1[-2],list1[-3],list1[-4],list1[-5])

列表元素的运行结果如图3.3所示。3.1列表1

创建和访问列表

2)使用切片访问列表元素切片的语法表达式如下:[start_index:end_index:step]其中,各参数说明如下:(1)start_index表示起始索引,从0开始,可以是正数或负数,为空时表示取到头或尾。(2)end_index表示结束索引,为空时表示取到头或尾。(3)step表示步长,步长不能为0,且默认值为1。

切片操作是指按照步长,截取从起始索引到结束索引,但不包含结束索引(也就是结束索引减1)的所有元素,但是注意为空时,可以取到头或尾。如果截取图3.1中的元素,切片截取元素如图3.4所示。3.1列表1

创建和访问列表

例如,截取示例3.1中的list1的前3个元素,代码如下:#截取列表前3个元素print(list1[0:3])截取列表前3个元素的运行结果如图:#截取列表后2个元素print(list1[-2:])3.1列表1

创建和访问列表

如果只需要获取倒数第2个元素,用切片实现,代码如下:#截取列表最后1个元素print(list1[-2:-1])

如果想获取的元素不是连续的,需要隔一个或者多个获取,应在切片后再加上一个参数,该参数用于指定元素间隔的个数。例如,获取示例3.1中前4个元素中每2个取1个,代码如下:#前4个元素,每2个取1个print(list1[:4:2])3.1列表1

创建和访问列表

例如,在示例3.1中将所有元素每隔3个获取1个元素,代码如下:#所有元素,每3个取1个print(list1[::3])

所有元素每3个取1个的运行结果如图3.8所示。3.1列表1

创建和访问列表

4.遍历列表元素

在Python中遍历列表的方法有4种,分别如下:(1)使用for循环。(2)使用Python内置的enumerate()函数。(3)使用iter()迭代器。(4)使用range()函数。

接下来,介绍具体遍历列表的操作。1)使用for循环

例如,现有列表list01=[2,3,4],使用for循环遍历输出元素,代码如下:list01=[2,3,4]fornuminlist01:

print(num)3.1列表1

创建和访问列表

2)使用Python内置的enumerate()函数Python内置的enumerate()函数的语法如下:enumerate(sequence,[start=0])

例如,使用enumerate()函数遍历列表list01,代码如下:list01=[2,3,4]foriinenumerate(list01):

print(i)3)使用iter()迭代器iter()迭代器用来生成迭代器,返回迭代对象,其使用语法如下:iter(object[,sentinel])

例如,使用iter()迭代器遍历列表list01,代码如下:list01=[2,3,4]foriiniter(list01):

print(i)3.1列表1

创建和访问列表

4)使用range()函数

在Python中,range()函数返回类型是ndarray,可用list()函数返回一个整数列表,一般用在for循环中。其使用语法如下:range(start,stop[,step])

在上述语法中,参数函数如下:(1)start表示计数开始,默认从0开始,如range(5)等价于range(0,5)。(2)end表示计数到end结束,但不包括end,如range(0,5)是[0,1,2,3,4],没有5。(3)step表示步长,默认为1,如range(0,5)等价于range(0,5,1)。

例如,使用range()函数遍历列表list01,代码如下:list01=[2,3,4]foriinrange(len(list01)):

print(i,list01[i])3.1列表2

列表的基本操作1.复制列表

将索引设置为冒号“:”,可以复制列表。例如,将示例3.1中的list1进行复制,操作如下:#复制列表list1_copy=list1[:]print(list1_copy)复制列表的运行结果如图:3.1列表2

列表的基本操作2.合并列表

加号“+”是列表合并运算符,例如,将示例3.1中的list1和list1_copy两个列表进行合并,代码如下:#合并列表list2=list1+list1_copyprint(list2)合并列表的运行结果如图所示:3.1列表2

列表的基本操作3.更新列表

列表的更新实际上是将原列表中的元素重新复制,例如,将示例3.1中的list1的第一个元素“Tom”改成“Jack”,操作如下:#原列表元素print("原列表为:",list1)#将Tom改成Jacklist1[0]="Jack"print("新列表为:",list1)更新列表的运行结果如图所示。3.1列表2

列表的基本操作4.删除列表在列表中删除元素,主要分为以下3种情况:(1)根据目标元素所在位置的索引值进行删除,可使用del语句。(2)根据元素的值进行删除,可使用列表(list类型)提供的remove()方法。(3)将列表中所有元素全部删除,可使用列表(list类型)提供的clear()方法。具体操作如下:1)根据索引进行删除del语句是Python中专门用于执行删除操作的语句,不仅可用于删除列表的元素,也可用于删除变量等。3.1列表2

列表的基本操作例如,若指定删除示例3.1中list1中的最后一个元素,代码如下:#原列表元素print("原列表为:",list1)#使用索引删除最后一个元素dellist1[-1]print("删除最后一个元素后:",list1)使用索引删除最后一个元素的运行结果如图3.12所示。3.1列表2

列表的基本操作

另外,del语句还可以用来删除列表,例如,删除示例3.1中的list1_copy,代码如下:#删除列表dellist1_copyprint(list1_copy)使用del语句删除列表的运行结果如图3.13所示。3.1列表2

列表的基本操作2)根据元素值进行删除

Python提供了remove()方法来删除列表元素,该方法并不是根据索引来删除元素的,而是根据元素本身的值来执行删除操作的。例如,删除示例3.1中值为“Tom”的元素,代码如下:#原列表元素print("原列表为:",list1)#删除指定值的元素list1.remove("Tom")print("删除‘Tom’后:",ist1)删除指定值的元素的运行结果如图3.14所示:3.1列表2

列表的基本操作3)清空列表所有元素

clear()方法用于清空列表的所有元素。例如,在示例3.1中,将list1_copy的列表数据清空,然后删除,代码如下:list1=['Tom',786,2.23,'Trump',70.2]#清空列表list1.clear()print(list1)清空列表的运行结果如图3.15所示:3.1列表3

列表的函数和方法3.1列表3

列表的函数和方法3.1列表3

列表的函数和方法list=[10,9,7,8]list.append(9)#在列表结尾处添加一个元素print("原列表:",list)list.sort(reverse=False)#reverse=False表示升序排列,True表降序排列print("使用sort()函数后list列表:",list)#使用sort()函数后原列表未发生改变print("降序排列:",list)print("获取9出现的次数:",list.count(9))#获取一个数值在列表中出现的次数list.remove(9)#列表中删除9这个元素print("删除9这个元素:",list)print("获取起始位置0到结束位置2中元素8所在的位置:",list.index(8,0,2))#获取起始位置0到结束位置2中元素8所在的位置list.pop(0)#删除第一个位置上的元素,和remove函数不同,remove()表示删除某个元素print("删除第一个位置上的元素:",list)list.extend([3,4,13])#将两个列表元素合并print("将两个列表元素合并:",list)3.1列表4

学生实践练习1.需求说明

在TIOBE2017年6月编程语言排行榜中,Python打败C#语言排名第4位,占据4.333%的比例。前5位语言分别为Java、C、C++、Python、C#。请完成以下步骤:(1)定义3个变量,分别存储Python语言的名称、排名和占据比例。(2)定义一个列表,按排名顺序存储前5位语言名称。(3)分别输出列表中的前3门语言、排名第3和第4位的语言、排名第3位之后的语言。2.实现思路(1)声明不同的变量分别保存名称、排名和占据比例。(2)使用输出函数输出Python的名称和排名等。(3)通过[头下标:尾下标]的方式,截取列表中的值及列表函数的使用。知识架构3.2元组1创建元组2访问元组元素3删除元组4元组的其他操作5学生实践练习3.2元组1

创建元组【语法】

元组是与列表非常类似的另一个序列数据类型。列表用中括号“[]”标识,而元组用小括号“()”或不加小括号“()”进行标识。列表的元素可以通过“列表名[下标]=元素值”的方式修改,但元组的元素不可以被修改,元素也不能被删除。

元组的创建很简单,只需要在小括号中添加元素,若有多个元素,以逗号“,”分隔。元组名=(值1,值2,…,值N)或者:元组名=值1,值2,…,值N例如,定义一个元组,代码如下:tuple1=('physics','chemistry',1997,2000)tuple2=1,2,3,4,53.2元组1

创建元组

在创建元组时,需要注意以下3点:(1)元组与字符串类似,下标索引从0开始,可以进行截取和组合等。(2)创建空元组,直接小括号即可,如tup=()。(3)元组中只有一个元素时,需要在元素后面添加逗号,否则会将这一个元素按照单个字符分隔存储。例如,创建只有一个元素“Tom”的元组tup1,代码如下:#加逗号,Tom整个会被当作一个元素tup1=("Tom",)print(tup1[0])#不加逗号,Tom会被分割成一个个字母,单独做元素tup2=("Tom")print(tup2[0])创建仅有一个元素的元组的运行结果如图3.18所示。3.2元组2

访问元组元素

1.访问单个元组元素

与列表的访问方式相同,元组也可以使用下标索引和切片来访问元组中的值。【示例3.3】使用索引访问元组元素。tuple=('Tom',786,2.23,'Trump',70.2)tinytuple=123,'John'print("完整元组:",tuple)print("元组的第一个元素:",tuple[0])print("第二个至第四个但不包含第四个的元素:",tuple[1:3])print("从第三个开始至元组末尾的所有元素:",tuple[2:])print("输出元组两次:",tinytuple*2)

使用索引访问元组元素的运行结果如图所示。3.2元组2

访问元组元素

另外,元组中的元素值是不允许修改的,但可以对元组进行连接组合。例如,在示例3.3中将tuple和tinytuple两个元组进行组合,添加代码如下:#组合元组print("组合的元组:",tuple+tinytuple)组合元组的运行结果如图3.20所示。3.2元组2

访问元组元素

2.遍历元组元素

元组和列表的遍历非常类似,也可以使用4种方式遍历,分别是for循环、enumerate()函数、iter()迭代器和range()函数。例如,使用for循环遍历示例3.3中的tuple元组,代码如下:tuple=('Tom',786,2.23,'Trump',70.2)#遍历元组forxintuple:print(x,end="")#加end=""可不换行3.2元组3

删除元组

元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组。del元组名【语法】例如,删除示例3.3中的tinytuple元组,代码如下:#删除元组deltinytupleprint(tinytuple)#此时tinytuple已不存在,所以报错3.2元组4

元组的其他操作

1.元组运算符

与字符串一样,元组之间可以使用“+”和“*”进行运算,这表示元组可以组合和复制,运算后会生成一个新的元组。常见的元组运算符操作见表3.3。3.2元组4

元组的其他操作

2.元组内置函数元组中包含的内置函数见表3.4。3.2元组4

元组的其他操作

【示例3.4】使用内置函数操作元组。tup1=(12,34,56)print("计算元组元素个数:",len(tup1))print("返回元组中元素最大值:",max(tup1))print("返回元组中元素最小值:",min(tup1))seq=['physics','chemistry',1997,2000]print("将列表转换为元组:",tuple(seq))3.2元组5

学生实践练习

1.需求说明

创建元组并访问元组元素,具体要求如下:(1)创建两个元组,每个元组中包含用户的姓名、性别(F/M)、年龄、身高等信息。(2)使用索引访问元组元素,访问第一个元组中第二个和倒数第二个的元素信息。(3)使用切片访问元组元素,访问第一个元组中第一个和第三个的元素信息。(4)使用运算符将两个元组复制并连接。2.实现思路(1)元组信息来源可以使用用户熟悉的人物信息,此处使用“Tom”和“Jack”两人的数据创建元组。(2)使用索引访问时要注意,从左往右索引从0开始递增,从右往左索引从−1开始递减,因此第二个元素的索引应为1,倒数第二个的索引应为−2。(3)使用切片访问元组时,应注意切片的范围是包下不包上,如果有间隔,还应在原切片后加上冒号和间隔个数。因此,此处的第一个和第三个元素的切片应写成[0:3:2],因为元素数量只有4个,所以还可以简写成[::2]。(4)使用“*”进行元组复制,使用“+”进行元组连接。知识架构3.3字典1创建字典2访问字典元素3修改字典4删除字典5字典的函数和方法6学生实践练习3.3字典1

创建字典

字典以键值对的方式存储数据,以两组分别为key和value的方式保存数据,key和value之间存在一对一的关系,通过指定的key总能找到唯一的value值。字典结构如图3.24所示。

字典用大括号“{}”标识,字典元素使用“key:value”的方式表示,多组元素之间用“,”分隔。3.3字典1

创建字典

【语法】dict={key1:value1,key2:value2}例如,定义一个字典,语句如下:dict={'Name':'Trumple','Age':7,'sex':'男'}3.3字典2

访问字典元素

1.访问单个字典元素

字典数据通过“字典名称[key]”的方式访问。【示例3.5】定义一个字典并访问其中“Name”键对应的值。#定义一个字典对象dict={'Name':'Trumple','Age':7,'sex':'男'}print("字典为:",dict)#访问字典中的值print("key为Name的值为:",dict['Name'])字典的使用的运行结果如图3.25所示。3.3字典3

遍历字典元素

字典的遍历主要借助于字典中的key值,常用的遍历方式是借助于for循环。例如,遍历示例3.5中的dict字典,代码如下:#定义一个字典对象dict={'Name':'Trumple','Age':7,'sex':'男'}#遍历元素forkeyindict:

print(dict[key])3.3字典4

修改字典

修改字典,可以是修改已有键对应的值,还可以是增加新元素。例如,在示例3.5中,将“Age”键对应的值改为37,并添加一个新元素"favorites":"游泳",代码如下dict={'Name':'Trumple','Age':7,'sex':'男'}print("原字典为:",dict)#修改字典中的值dict['Age']=37#如果对应的键不存在,就添加该记录dict['favorites']='游泳'print("新字典为:",dict)

运行结果如下:3.3字典5

删除字典

关于字典的删除操作,主要分为以下3种:(1)使用del语句删除指定元素。(2)使用del语句删除整个字典。(3)使用clear()方法清空字典所有元素。【示例3.6】在示例3.5的基础上,首先删除键是'Name'的元素,然后清空字典,最后删除字典dt={'Name':'Trumple','Age':7,'sex':'男'}print("原字典为:",dt)#删除键是'Name'的元素deldt['Name']print("删除键是'Name'的元素后:",dt)#清空字典dt.clear()print("清空字典后:",dt)#删除字典deldtprint("删除字典后:",dt)3.3字典5

删除字典

在示例3.6中,删除整个字典后,输出字典会显示错误信息:name'dt'isnotdefined。注意在示例3.5中字典名字为dict,使用del删除,代码如下:#定义一个字典对象dict={'Name':'Trumple','Age':7,'sex':'男'}print("字典为:",dict)#删除字典deldictprint("删除字典后:",dict)删除dict字典会出现如图效果:3.3字典6

字典的函数和方法字典包含的函数见表3.5。3.3字典6

字典的函数和方法字典包含的方法见表3.6。3.3字典7

学生实践练习1.需求说明

定义一组颜色(blue,yellow,red,white,black),每种颜色都不能被修改。分别获取排在前3位的颜色、第4到第5位的颜色及第3位后的颜色。最后在该组颜色中添加(gray,orange)两种颜色。定义一个保存国家及其对应首都的数据结构,例如,中国—北京、美国—华盛顿和英国—伦敦。根据国家可以查询出对应的首都,也可以添加、修改和删除一组数据。2.实现思路(1)Python数据类型中只有元组的元素不能被修改,因此将这一组颜色保存到元组中。(2)通过[头下标:尾下标]的方式截取元组中的值及列表函数的使用。(3)Python数据类型中用字典保存具有映射关系的数据。定义一个字典对象就可以保存国家及其对应首都的数据。知识架构3.4集合与嵌套1集合24种类型的相互比较3复杂类型转换4嵌套5学生实践练习3.4集合与嵌套1

集合

集合(Set)是一个无序的不重复元素序列,可以使用大括号{}或者set()函数创建集合。但是需要注意的是,创建一个空集合必须用set()而不可以用{},因为{}会默认创建一个空字典。

【语法】parame={value1,value2,...}

或set(value)在上述语法结构中,参数value可以是列表、元组、字典等。3.4集合与嵌套1

集合

1.创建集合

创建空集合只能使用set()函数,而创建有具体值的集合,则使用{}或者set()函数都可以。

【示例3.7】创建空集合和有值的集合。#创建一个空集合set1=set()print("空集合:",set1)#创建一个具有数据的集合set2={1,'a','apple',11.22}print("集合:",set2)#创建一个列表做参数的集合set3=set([1,2,3])print("集合(列表作参数):",set3)#集合具有去重功能set4={'apple','orange','apple','pear','orange','banana'}print("集合(去重功能):",set4)3.4集合与嵌套1

集合

创建集合的运行结果如图3.30所示。

在示例3.7中,创建的集合set4中有重复的元素“apple”和“orange”,但在输出的时候,并没有重复输出,说明集合具有去重功能。3.4集合与嵌套2

集合的基础操作

集合的操作主要包括判断元素是否在集合内、添加元素、删除元素、计算元素个数、清空集合等。1)判断元素是否在集合内

【语法】xins

上述语法表示判断元素x是否在集合s中,若存在,则返回True,若不存在,则返回False。set4={'apple','orange','apple','pear','orange','banana'}#判断banana是否在集合set4中print("anana是否在集合set4中?")print("banana"inset4)

例如,在示例3.7中,判断“banana”是否在集合set4中,代码如下:3.4集合与嵌套2

集合的基础操作

判断元素是否在集合内的运行结果如图3.31所示。

2)添加元素往集合中添加元素,有以下两种方法:(1)add()方法。例如,将数据x添加到集合s中去,使用方式如下:s.add(x)

(2)update()方法。可以将列表、元组、字典等添加到集合中去,使用方式如下:s.update(x)3.4集合与嵌套2

集合的基础操作

【示例3.8】在示例3.7的基础上,添加字符串、字典、列表到集合set2中。set2={1,'a','apple',11.22}#将值添加到集合中,如果值存在,则不做任何操作set2.add('car')print(set2)#另外一种添加方式,参数可以是列表、元组、字典等#添加字典set2.update({2,3})print(set2)#添加列表set2.update([1,4],[5,6])print(set2)3.4集合与嵌套2

集合的基础操作

3)移除元素

【语法】s.remove(x)

或s.discard(x)

在上述语法中,两种方法都表示将元素x从集合s中移除,但是使用remove()方法时,如果元素不存在,则会发生错误;使用discard()方法时,如果元素不存在,则不会发生错误。例如,在示例3.8中,移除set2中的“apple”,代码如下:3.4集合与嵌套2

集合的基础操作#移除apple元素set2.remove("apple")print(set2)print("discard()方法:移除set2中不存在的元素hello,不会报错")set2.discard("hello")print("remove()方法:移除set2中不存在的元素hello,会报错")set2.remove("hello")

运行结果:3.4集合与嵌套2

集合的基础操作print("原集合:",set2)#随即删除一个元素print("随机删除一个元素:")set2.pop()print(set2)

另外,可以设置随机删除集合中的一个元素,使用pop()方法实现。例如,随机删除示例3.8中的set2的一个元素,代码如下:3.4集合与嵌套2

集合的基础操作

【示例3.8】在示例3.7的基础上,添加字符串、字典、列表到集合set2中。set2={1,'a','apple',11.22}#将值添加到集合中,如果值存在,则不做任何操作set2.add('car')print(set2)#另外一种添加方式,参数可以是列表、元组、字典等#添加字典set2.update({2,3})print(set2)#添加列表set2.update([1,4],[5,6])print(set2)3.4集合与嵌套2

集合的基础操作

4)计算元素个数

计算集合中元素的个数需要使用len()函数,例如,计算示例3.8中的set2的元素个数,代码如下:print("原集合:",set2)#计算元素个数print("元素个数:",len(set2))

计算元素个数的运行结果如图3.35所示。3.4集合与嵌套2

集合的基础操作

5)清空集合

与清空字典操作类似,清空集合需使用clear()方法。例如,清空示例3.8中的set2集合,代码如下:print("原集合:",set2)#清空集合set2.clear()print("清空后:",set2)

清空集合的运行结果如图3.36所示。3.4集合与嵌套2

集合的基础操作

6)删除集合

删除集合需使用del语句。例如,在示例3.8基础上,删除set2集合,代码如下:print("原集合:",set2)delset2print("删除后:",set2)

删除集合的运行结果如图3.37所示。3.4集合与嵌套2

集合的基础操作

3.遍历集合元素

遍历集合set和遍历列表list类似,都可以通过for循环实现。例如,遍历示例3.8中的集合set2中的元素,代码如下:set2={1,'a','apple',11.22}#遍历元素fornameinset2:print(name)3.4集合与嵌套3

4种类型的相互比较

Python中4种复杂数据类型分别是列表、元组、字典和集合,其区别详见表3.7。3.4集合与嵌套4

复杂类型转换

常用的类型转换函数见表3.8。3.4集合与嵌套4

复杂类型转换

1.列表转为其他类型list1=[6,7,7,8,8,9]print("1.原列表为:",list1)#列表转集合(去重)set1=set(list1)print("转成集合为:",set1)#两个列表转字典list2=['key1','key2','key3']list3=['1','2','3']print("2.两个列表分别为:\n\t",list2,"\n\t",list3)dict1=dict(zip(list2,list3))print("两个列表转成字典为:",dict1)#嵌套列表转字典list4=[['key1','value1'],['key2','value2'],['key3','value3']]print("3.嵌套列表为:",list4)dict2=dict(list4)print("嵌套列表转成字典为:",dict2)3.4集合与嵌套4

复杂类型转换

列表转为其他类型的运行结果如图3.38所示。3.4集合与嵌套4

复杂类型转换

2.元组转为其他类型元组具有不可修改的特点,可以将其转换为列表、集合、字符串和字典等。tuple1=(1,2,3)print("1.元组为:",tuple1)#元组转列表list1=list(tuple1)print("转换为列表:",list1)#元组转字典#两个元组转字典tuple3=('key1','key2','key3')tuple4=('1','2','3')print("2.两个元组分别为:\n\t",tuple3,"\n\t",tuple4)dict1=dict(zip(tuple3,tuple4))print("两个元组转成字典为:",dict1)#嵌套元组转字典tuple5=(('key1','value1'),('key2','value2'),('key3','value3'))print("3.嵌套元组为:",tuple5)dict2=dict(tuple5)print("嵌套元组转成字典为:",dict2)3.4集合与嵌套4

复杂类型转换

元组转为其他类型的运行结果如图3.39所示。3.4集合与嵌套4

复杂类型转换

3.字典转为其他类型1)键或者值单独转换为其他类型a={'a':1,'b':2,'c':3}print('字典为:',a)#字典中的key转换为列表list1=list(a.keys())print('字典中的key转换为列表:',list1)#字典中的key转换为元组tup1=tuple(a.keys())print('字典中的key转换为元组:',tup1)#字典中的key转换为集合set1=set(a.keys())print('字典中的key转换为集合:',set1)#字典中的value转换为列表list2=list(a.values())print('字典中的value转换为列表:',list2)#字典中的value转换为元组tup2=tuple(a.values())print('字典中的value转换为元组:',tup2)#字典中的value转换为集合set2=set(a.values())print('字典中的value转换为集合:',set2)3.4集合与嵌套4

复杂类型转换

字典中的键和值单独转换为其他类型的运行结果如图3.40所示。3.4集合与嵌套4

复杂类型转换

2)字典与JSON互转在Python语言中,JSON数据与dict字典之间的转化是必不可少的操作。Python自带JSON库,编码时应使用importjson导入。在JSON模块中有两个方法用于与字典互转。(1)loads():将JSON数据转换成dict数据。(2)dumps():将dict数据转换成JSON数据。importjsondic1={'name':'many','age':10,'sex':'male'}print('1.字典为:',dic1)#字典转换为JSONj=json.dumps(dic1)print('字典转换为JSON数据:',j)#JSON转换为字典j='{"name":"007","age":28,"sex":"male"}'print('2.JSON数据为:',dic1)dic2=json.loads(j)print('JSON数据转换为字典:',dic2)print('JSON数据转换为字典后,name值为:',dic2["name"])3.4集合与嵌套4

复杂类型转换

字典与JSON互转的运行结果如图3.41所示。3.4集合与嵌套4

复杂类型转换

在示例3.12中,若将字典dic1中的“sex”对应值改为“男”,转换成JSON数据会输出“\u7537”,如果想原样输出,应同示例3.5,在进行JSON转换时,设置dumps()方法的参数ensure_ascii为False,代码修改如下:importjsondic1={'name':'many','age':10,'sex':'男'}print('1.字典为:\n',dic1)#字典转换为JSONj=json.dumps(dic1)print('转换为json数据(不加ensure_ascii):\n',j)j01=json.dumps(dic1,ensure_ascii=False)print('转换为json数据(ensure_ascii):\n',j01)3.4集合与嵌套4

复杂类型转换

dumps()方法参数设置的运行结果如图3.42所示。3.4集合与嵌套4

复杂类型转换

3)字典中的键和值互相转换字典中的键和值互相转换,需要使用for循环语句,例如,将示例3.12中的字典dic1的键值互转,代码如下:dic1={'name':'many','age':10,'sex':'male'}print('字典为:',dic1)dic1_new={value:keyforkey,valueindic1.items()}print("key和value转换后的字典为:",dic1_new)3.4集合与嵌套4

复杂类型转换

字典中的key和value互相转换的运行结果如图3.43所示。3.4集合与嵌套4

复杂类型转换

4)集合转换为其他类型

集合使用大括号“{}”包裹元素,可以转换为列表、元祖、字符串和字典等类型,具体操作见示例3.13。#两个集合转字典set3={'key1','key2','key3'}set4={'1','2','3'}print("两个集合分别为:\n\t",set3,"\n\t",set4)dict1=dict(zip(set3,set4))print("两个集合转成字典为:",dict1)3.4集合与嵌套4

复杂类型转换

5)字符串转换为其他类型

字符串可以使用表3.8中的函数,转换为列表、元组、集合、字典等类型,具体操作见示例3.14。print("原字符串为:",s)#字符串转换为列表print("字符串转列表:",list(s))#字符串转换为元组print("字符串转元组:",tuple(s))#字符串转换为集合print("字符串转集合(去重):",set(s))#字符串转换为字典dic2=eval("{'name':'ljq','age':24}")print("字符串转字典:",dic2)3.4集合与嵌套4

复杂类型转换

字符串转换为其他类型的运行结果如图3.45所示。3.4集合与嵌套5

嵌套

1.嵌套列表

嵌套列表就是指列表中的元素也是列表,可以使用for或者while循环依次取出其中的数据。嵌套列表仍然符合列表的基本特性,之前学的方法依旧可以使用。例如,将两个列表嵌套成一个列表,代码如下#两个列表a=['a','b','c']n=[1,2,3]#嵌套成一个列表x=[a,n]print(x)其输出结果为[['a','b','c'],[1,2,3]]。以上是简单的两层嵌套,还有多层嵌套,3.4集合与嵌套5

嵌套

【示例3.15】读取一个三层嵌套列表中的元素。#三层嵌套列表m=["a",["b","c",["inner"]]]【示例3.17】#使用该函数直接解析嵌套列表defprintm(listin):

foriinlistin:

#使用isinstance()函数来判断一个i是否是一个列表

ifisinstance(i,list):

printm(i)#循环读取

else:

print(i)printm(m)3.4集合与嵌套5

嵌套

2.嵌套字典

嵌套字典是在字典中存储字典。在读取嵌套字典的过程中,首先通过key来得到相应的value,而相应的value又由字典构成,需再次利用key作为索引得到value,以此类推访问最深层级的字典数据。一般情况下,在字典中嵌套字典时,代码会很复杂。

在实际项目中,如果有多个网站用户,每个都有独特的用户名,可在字典中将用户名作为键,然后将每位用户的信息存储在字典中,并将该字典作为用户名相关联的值。3.4集合与嵌套5

嵌套

【示例3.16】对每位用户,我们都存储了三项信息(名、姓和居住地),访问所有信息时,需遍历所有的用户名,然后访问与每位用户相关联的信息字典。3.4集合与嵌套5

嵌套

3.将字典嵌套到列表中

有时候我们希望存储很多信息,但是这些信息或互相关联或者存储于一处,而单一的字典无法满足的时候,我们就可以选择嵌套。例如,实现多个学生所上课程信息的集中存储,首先将学生信息存为字典,然后将字典放入到列表中,见示例3.17。【示例3.17】#定义三个字典dict1={"张三":"C","李四":"Java"}dict2={"王五":"Python","小明":"PHP"}dict3={"小红":"C++","小兰":"MVC"}#将字典放入列表中all=[dict1,dict2,dict3]#输出all,使用for循环formoreinall:#

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论