组合数据类型课件_第1页
组合数据类型课件_第2页
组合数据类型课件_第3页
组合数据类型课件_第4页
组合数据类型课件_第5页
已阅读5页,还剩88页未读 继续免费阅读

下载本文档

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

文档简介

1、2022/7/29第3章 组合数据类型主 讲 人:第1页,共93页。目录2022/7/2921. 列表2. 元组3. 字典4. 集合5. 组合数据类型的高级特性第2页,共93页。2022/7/291.列表 Python内置的一种数据类型是列表(list) 。list是一种最具灵活性的有序集合对象类型,可以随时添加和删除其中的元素。第3页,共93页。2022/7/291.列表1.1创建列表通常使用左右方括号(即: 和 )将数据元素包裹起来创建一个列表,如下所示。其中列表list1中包含5个元素,分别是1、2、3、4、5,list1为列表名。这种创建列表的方式适用于对于列表中元素个数及其数值已知时

2、。 List1=1,2,3,4,5 List2=a,b,c,d第4页,共93页。2022/7/291.列表1.1创建列表当遇到如将一个元组(参考3.2节)转换为列表时,则需要使用另外一种方法创建列表调用list(tuple)函数,该函数返回一个包含tuple中所有元素的列表。注:直接调用不带参的list()函数时,将返回一个空列表,即: 。第5页,共93页。2022/7/291.列表1.1创建列表列表中的元素的数据类型可以各不相同,如int,string类型,甚至可以是一个列表类型,如在下例中10,20为一个list类型,它作为list3的一个元素存在于list3中。 List3=marry,

3、2.0,5,10,20 List3marry, 2.0, 5, 10, 20第6页,共93页。2022/7/291.列表1.1创建列表如图3-1所示,列表的下标是从0开始,List3列表的第一个元素是marry,用L0可以表示L的第一个元素,第二个元素是2.0,用L1表示,以此类推,第四个元素是一个列表,即10, 20。图3-1 元组索引位置第7页,共93页。2022/7/291.列表1.2读取元素元素下标表示该元素在list中的位置。注意list中元素下标是从0开始的,如第n个元素下标为n-1。但当读取元素传入的元素下标超出list集合的大小时将会报“元素下标超出范围”的错误。第8页,共93

4、页。2022/7/291.列表1.2读取元素 List2=a,b,c,d List20 #访问列表的第一个元素a List21 #访问列表的第二个元素b List25 #超出列表元素下标,报错Traceback (most recent call last): File , line 1, in List25IndexError: list index out of range由于list2的长度为4,在取第5个元素时,list2中元素的最大下标为3 List2-1d List2-2c List2-3b List2-5 #超出列表元素下标,报错Traceback (most recent ca

5、ll last): File , line 1, in List2-5IndexError: list index out of range除了正向取list中的元素外,也可以逆向去取,用元素下标-1表示最后一个元素,-2表示倒数第二个元素,同样注意不能超出元组个数的界限,例如:。第10页,共93页。2022/7/291.列表1.3遍历列表 for cheese in cheeses:print(cheese) 遍历一个列表元素的最常见方式是使用for循环,常见的有以下两种方式。第一种遍历方法隐藏了列表cheeses的长度,操作较为便利。第11页,共93页。2022/7/291.列表1.3遍历

6、列表 for i in range(len(numbers):numbersi=numbersi *2第二种遍历方法则使用len()函数计算出列表numbers的长度后进行遍历操作,其中range()函数返回的是从0到numbers长度的数值序列。第12页,共93页。2022/7/291.列表1.4替换元素 numbers=12,13 numbers1=14 numbers 12, 14 和字符串不同的是,列表是可变的,可以在列表中指定下标的值对元素进行修改,例如:numbers1原先为13,当执行 numbers1=14 时,numbers1的值被修改为14。第13页,共93页。2022/7

7、/291.列表1.5增加元素 list=1 list=list+a, b list1, a, b*操作符重复一个列表多次: 0*50, 0, 0, 0, 0 4,5,6 *44, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6方法一:使用“+”将一个新列表附加在原列表的尾部。例如:和字符串不同的是,列表是可变的,可以在列表中指定下标的值对元素进行修改,例如:第14页,共93页。2022/7/291.列表1.5增加元素 list.append(True) list1, a, b, True方法二:使用append()方法向列表的尾部添加一个新元素。例如: list.extend(

8、c,5) list1, a, b, True, c, 5方法三:使用extend()方法将一个列表添加在原列表的尾部。例如:第15页,共93页。2022/7/291.列表1.5增加元素 list.insert(0,x) listx, 1, a, b, True, c, 5方法四:使用insert()方法将一个元素插入到列表的指定位置。该方法有两个参数,第一个参数为插入位置,第二个参数为插入元素。例如:第16页,共93页。2022/7/291.列表1.6检索元素 list=x,y,a,b,True,x list.count(x)2 使用count()方法计算列表中某个元素出现的次数。 3 in

9、listFalse x in listTrue使用in运算符检查某个元素是否在列表中。第17页,共93页。2022/7/291.列表1.6检索元素使用index()方法返回某个元素在列表中的准确位置,若该元素不在列表中将会出错。值得注意的是,若使用该方法的元素在该列表中存在相同项,则返回显示最小index的位置,如list.index(x),存在两个x,则只显示最小位置。 list.index(x)0第18页,共93页。1.列表1.7删除元素方法一:使用del语句删除某个特定位置的元素。 list=x,y,a,b,True,x del list1 listx, a, b, True, x第19

10、页,共93页。1.列表1.7删除元素方法二:使用remove()方法删除某个特定值的元素。remove(x)从list中移除最左边出现的数据项x,如果找不到x就产生ValueError。 list=x,y,a,b,True,x list.remove(x) listy, a, b,True, x list.remove(x) listy, a, b,True list.remove(x)Traceback (most recent call last): File , line 1, in list.remove(x)ValueError: list.remove(x): x not in l

11、ist第20页,共93页。1.列表1.7删除元素方法三:使用pop()方法来弹出(删除)指定位置的元素,缺省参数时弹出最后一个元素。弹出空数组将会报错。 list=x,y,a,b,True,x list.pop()x listx, y, a, b, True list.pop(1)y listx, a, b, True list.pop(1)a第21页,共93页。1.列表1.7删除元素 list.pop(1)b list.pop(1)True list.pop()x list list.pop()Traceback (most recent call last): File , line 1,

12、 in list.pop()IndexError: pop from empty list接上一页PPT第22页,共93页。1.列表1.8字符串和列表的转化 s=Micheal t=list(s) tM, i, c, h, e, a, l字符串是字符的序列,而列表是值的序列,但字符的列表和字符串并不相同。若要将一个字符串转化为一个字符的列表,可以使用函数list。第23页,共93页。1.列表1.8字符串和列表的转化 s=you are so beautiful t=s.split() tyou, are, so, beautiful由于list是内置函数的名称,所以应当尽量避免使用它作为变量名

13、称。list函数会将字符串拆成单个的字母。如果想要将字符串拆成单词,可以使用split方法。第24页,共93页。1.列表1.8字符串和列表的转化 u=www.studyP d=u.split() dwww.studyP但是下面的例子却失败了,输出了整个列表。 u=www.studyP c=u.split(.) cwww, studyPython, com, cn这时候就要用split接受一个可选的形参,作为分隔符,用于指定用哪个字符来分割单词。例如上面的例子可以用一个“.”作为分隔符,如下所示。第25页,共93页。1.列表1.8字符串和列表的转化join是split的逆操作。它接收字符串列表,

14、并拼接每个元素。join是字符串的方法,所以必须在分隔符上调用它,并传入列表作为实参。 t=you,are,so,beautifil s= .join(t) syou are so beautifil第26页,共93页。1.列表1.8列表的常用函数cmp()格式:cmp(列表1,列表2)。功能:对两个列表进行比较,若第一个列表大于第二个,则结果为1,相反则为-1,元素完全相同则结果为0。 list1=123,xyz list2=123,abc cmp(list1,list2)1 cmp(list2,list1)-1 list2=list1 cmp(list1,list2)0第27页,共93页。

15、1.列表1.8列表的常用函数len()格式:len(列表)。功能:返回列表中的元素个数。 len(list1) 2第28页,共93页。1.列表1.8列表的常用函数max()和min()格式:max(列表) min(列表)。功能:返回列表中的最大或最小元素。 str_l=abc,xyz,123 num_l=123,456,222 max(str_l)xyz min(str_l)123 max(num_l)456 min(num_l)123第29页,共93页。1.列表1.8列表的常用函数sorted()和resersed()格式:sorted(列表) reversed(列表)。功能:前者的功能是对

16、列表进行排序,默认是按升序排序,还可在列表的后面增加一个reverse参数,其等于True则表示按降序排序;后者的功能是对列表进行逆序。 list=1,4,3,6,9,0,2 for x in reversed(list): print x,2 0 9 6 3 4 1 sorted(list)0, 1, 2, 3, 4, 6, 9 sorted(list,reverse=True)9, 6, 4, 3, 2, 1, 0第30页,共93页。1.列表1.8列表的常用函数sum()格式:sum(列表)。功能:对数值型列表的元素进行求和运算,对非数值型列表运算则出错。 sum(list)25 sum(

17、str_l)Traceback (most recent call last): File , line 1, in sum(str_l)TypeError: unsupported operand type(s) for +: int and str第31页,共93页。目录2022/7/2921. 列表2. 元组3. 字典4. 集合5. 组合数据类型的高级特性第32页,共93页。2.元组元组(tuple)是值的一个序列。其中的值可以是任何类型,并且按照整数下标索引,与列表类似。但元组中的元素不能修改,列表中的元素可以修改。第33页,共93页。2.元组2.1元组与列表的区别元组基本上都是不可改

18、变的列表。元组几乎具有列表所有的特性,除开那些违反不变性的特征。也就是说,没有函数和方法可以改变元组。不可变的tuple有什么意义?因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。当后续介绍字典类型时,会发现字典的键必须是不可变的,因此元组可以用作字典的键,但列表不能。第34页,共93页。2.元组2.1元组与列表的区别语法上,元组就是用逗号分隔的一列值,使用“=”将元组赋给变量。 tuple1=a,1,boy虽然并不必需,但元组常常用括号括起来。 tuple1=(a,1,boy) tuple1(a, 1, boy)第35页,共93页。2.元组2.1

19、元组与列表的区别新建元组的另一种形式是使用内置函数tuple。不带参数时,它会新建一个空元组。 t=tuple() t()第36页,共93页。2.元组2.1元组与列表的区别则定义的不是tuple,是1这个数!这是因为括号()既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义。因此,Python规定,这种情况下,按小括号进行计算,计算结果自然是1。所以,只有一个元素的tuple定义时必须加一个逗号“,”来消除歧义,即: t = (1,) t(1,)但是,要定义一个只有一个元素的tuple,例如: t = (1) t1第37页,共93页。2.元组2.1元组与列表的区别其他序列(列表

20、和字符串)的操作都可用于元组,除了那些会违反不变性的列表运算符。“+”和“*”运算符同样适用于元组。成员操作(in)和for循环同样适用于元组长度(len)、最大(max)和最小(min)同样适用于元组。没有任何的操作能更改元组。例如append、extend、insert、remove、pop、reverse和sort不能用于元组。第38页,共93页。2.元组2.2元组的常用操作由于元组和列表比较相似,使得对列表的很多操作如“+”、“*”等运算符以及长度(len)、最大(max)、最小(min)等运算都适用于元组。而那些如append、extend、insert、remove、pop、rev

21、erse和sort等能改变元素的操作都不能直接操作元组。然而,当元组中存在列表元素项时,就可以使用上述如append等方法修改list中的元素,达到间接修改元组元素的目的。第39页,共93页。2.元组2.3元组的常用函数元组的常用函数与列表类似,除了那些会违反不变性的函数。语 法描 述cmp(tuple1, tuple2)比较两个元组元素len(tuple)计算元组元素个数max(tuple)返回元组中元素最大值min(tuple)返回元组中元素最小值tuple(seq)将列表转换为元组表3-1元组的常用函数第40页,共93页。目录2022/7/2921. 列表2. 元组3. 字典4. 集合5

22、. 组合数据类型的高级特性第41页,共93页。3.字典字典是一种集合,它不是序列。字典可以看成元素对构成的列表,其中一个元素是键,另一个元素是值。在搜索字典时,首先查找键,当查找到键后就可以直接获取该键对应的值,效率很高,是一种高效的查找方法。第42页,共93页。3.字典3.1创建字典与列表、元组不同的是,字典是以“”和“”定义的,而且字典中每个元素包含两个部分,即键和值。下面给出了一些实例,展示了各种语法,这些语法产生的是相同的字典。第43页,共93页。3.字典3.1创建字典 d1=dict(id:19,name:Marry,city:chongqing) d2=dict(id=19,nam

23、e=Marry,city=chongqing) d3=dict(id,19),(nmae,Marry),(city,chongqing) d4=dict(zip(id,name,city),(19,Marry,chongqing) d5=id:19,name:Marry,city:chongqing d1name: Marry, id: 19, city: chongqing d2name: Marry, id: 19, city: chongqing d3name: Marry, id: 19, city: chongqing d4name: Marry, id: 19, city: cho

24、ngqing d5name: Marry, id: 19, city: chongqing第44页,共93页。3.字典3.2查找与反向查找 d1id19 d1nameMarry d1chongqingTraceback (most recent call last): File , line 1, in d1chongqingKeyError: chongqing字典定义好后,可以通过键来查找值,这个操作称为“查找”。第45页,共93页。3.字典3.2查找与反向查找 def reverse_lookup(d,v):for k in d:if dk=v:return kraise LookupE

25、rror()对于字典的操作通常是通过键来查找值,而能不能通过一个给定的值来确定其键呢?由于字典是一对多的关系,即一个键可能对应多个值,若想根据一个值来确定其键时,只能通过暴力搜索的方法。下面给出一个简单的暴力搜索实例,该段代码接收一个值,并返回映射到该值的键:第46页,共93页。3.字典3.3遍历字典 for key in d1.keys():print(key,d1key)name Marryid 19city Chongqing用循环语句来遍历字典中的每个元素的键和值,如下所示:第47页,共93页。3.字典3.4添加和修改字典 d1name=jason d1name: jason, id:

26、 19, city: chongqing d1sex=female d1sex: female, name: jason, id: 19, city: chongqing字典的大小和列表都是动态的,即不需要事先指定其容量大小,可以随时向字典中添加新的键值对,或者修改现有键所关联的值。添加和修改的方法相同,都是使用“字典变量名键名=键值”的形式,主要区分在于字典中是否已存在该键值对,若存在则为修改,否则为添加。例如:第48页,共93页。3.字典3.4添加和修改字典 d1name=jason d1name: jason, id: 19, city: chongqing d1sex=female d

27、1sex: female, name: jason, id: 19, city: chongqing例如:d1=dict(id:19,name:Marry,city:chongqing),d1中已经存在name键值对,所以第一个操作是“修改”。d1中原本不存在sex键值对,所以第二个操作是“添加”。因为字典是无序的,类似于append在尾部添加键值对的方法是没有任何意义的。第49页,共93页。3.字典3.5字典长度 len(d1)4与列表、元组相同,可以用len()函数返回字典中键的数量,如下所示。第50页,共93页。3.字典3.6字典检索 id in d1True name in d1Tru

28、e NO in d1False可以使用in运行符来测试某个特定的键是否在字典中。表达式k in d(d为字典)查找的是键,而不是值。第51页,共93页。3.字典3.6字典检索 d1=sex: female, name: jason, id: 19, city: chongqing vals=d1.values() jason in valsTrue查看一个值是不是出现在字典中,可以使用方法values,它返回该字典的所有值的一个集合,然后检索当前值是否在集合中即可,例如:第52页,共93页。3.字典3.7删除元素和字典可以使用del语句删除指定键的元素或整个字典;使用clear()方法来删除字

29、典中所有元素;使用pop ()方法删除并返回指定键的元素;popitem()弹出随机的项。第53页,共93页。3.字典3.8字典的常用函数copy():返回一个具有相同键值对的新字典,该新字典是原来字典的一个副本(这个方法实现的是浅拷贝) 。fromkeys():使用给定的键建立新的字典,每个默认对应的值为None。get():get方法是一个更宽松的访问字典项的方法。一般来说,如果试图访问字典中不存在的项时会出错。items():items方法将所有的字典项以列表的方式返回,这些列表项中的每一项都来自于(键,值)。第54页,共93页。3.字典3.8字典的常用函数keys():将字典中的键以列

30、表形式返回。setdefault():能够获得与给定键相关联的值,除此之外,setdefault还能在字典中不含有给定键的情况下设定相应的键值。update():利用一个字典项更新另一个字典,若有相同的键存在,则会进行覆盖。第55页,共93页。目录2022/7/2921. 列表2. 元组3. 字典4. 集合5. 组合数据类型的高级特性第56页,共93页。4.集合集合(set)是0个或多个对象引用的无序组合,这些对象所引用的对象都是可哈希运算的。集合是可变的,因此可以很容易地添加或移除数据项,但由于其中的项是无序的,因此,没有索引位置的概念。在集合中,任何元素都没有重复,这是集合的一个非常重要的

31、特点。set和dict类似,是一组key的集合,但不存储value,且在set中没有重复的key。第57页,共93页。4.集合4.1创建集合可以通过调用集合的构造函数来创建一个集合。和前文许多其他数据结构不同,创建集合没有快捷方式。因此,要创建集合,必须使用set构造函数。set构造函数至多有一个参数。如果没有参数,set会创建空集。如果有一个参数,那么参数必须是可迭代的,例如字符串或列表,可迭代对象的元素将生成集合的成员。第58页,共93页。4.集合4.1创建集合没有参数,set会创建空集。 nullSet=set() nullSetset()提供一个str作为输入集合,创建一个set。 a

32、_set=set(abcd) a_seta, c, b, d提供一个list作为输入集合,创建一个set。 s = set(1, 2, 3) s1, 2, 3重复元素在set中自动被过滤。 s = set(1, 1, 2, 2, 3, 3) s1, 2, 3第59页,共93页。4.集合4.2添加元素通过add(key)方法可以添加元素到set中,可以重复添加,但不会有效果。例如: s.add(4) s1, 2, 3, 4 s.add(4) s1, 2, 3, 4第60页,共93页。4.集合4.3删除元素通过remove(key)方法可以删除元素。例如:discard(key)也可删除元素,不同

33、的是,如果删除的元素不在集合中,remove会报错,discard不会报错。例如:clear()删除集合的所有元素(使它成为空集)。第61页,共93页。4.集合4.4典型的集合运算符len():和所有集合类型一样,len函数可以确定集合中的元素数量。in:判断某元素是否在集合中。in运算符根据元素是否在集合中返回布尔值True或False。for:和所有集合类型一样,for语句能遍历集合中的元素。第62页,共93页。4.集合4.5典型的数学集合运算交集 s1 = set(1, 2, 3) s2 = set(2, 3, 4) ersection(s2)2, 3 s1 & s2 2, 3第63页,

34、共93页。4.集合4.5典型的数学集合运算并集 s1.union(s2)1, 2, 3, 4 s1 | s21, 2, 3, 4第64页,共93页。4.集合4.5典型的数学集合运算差集 s1.difference(s2)1 s2.difference(s1)4 s1-s21 s2-s1 4第65页,共93页。4.集合4.5典型的数学集合运算对称差 s1.symmetric_difference(s2)1, 4 s2.symmetric_difference(s1)1, 4第66页,共93页。4.集合4.5典型的数学集合运算子集和超集 sSet=set(1,2,3) bSet=set(1,2,3

35、,4,5,6) sSet.issubset(bSet)True bSet.issubset(sSet)False sSet.issuperset(bSet) False bSet.issuperset(sSet)True sSet.issubset(sSet) True sSet.issuperset(sSet) True第67页,共93页。4.集合4.6集合的常用函数前一小节集合的常用操作已经把集合的用法介绍得差不多了,这里就补充几个集合的常用函数,如表3-2所示。语 法描 述s.copy()返回一个新集合,它是集合s的浅拷贝s.update(t)用t中的元素修改s,即s现在包含s或t的成员

36、ersection_update(t)s中的成员是共同属于s和t的元素s.symmetric_difference_update(t)s中的成员更新为那些包含在s或t中,但不是s和t共有的元素表3-2集合的常用函数第68页,共93页。目录2022/7/2921. 列表2. 元组3. 字典4. 集合5. 组合数据类型的高级特性第69页,共93页。5.组合数据类型的高级特性5.1切片La:b表示从索引a开始取,直到索引b为止,但不包括索引b。取前3个元素,用一行代码就可以完成切片。从索引1开始,取出2个元素:支持倒数切片。L-1取倒数第一个元素 L = Michael, Sarah, Tracy,

37、 Bob, Jack L0:3Michael, Sarah, Tracy L1:3Sarah, Tracy第70页,共93页。5.组合数据类型的高级特性5.1切片简单应用切片操作十分有用。我们先创建一个099的数列。 L = list(range(100) L0, 1, 2, 3, , 99 L-10:90, 91, 92, 93, 94, 95, 96, 97, 98, 99可以通过切片轻松取出某一段数列。比如前10个数: L:100, 1, 2, 3, 4, 5, 6, 7, 8, 9后10个数:第71页,共93页。5.组合数据类型的高级特性5.1切片简单应用前1120个数: L10:20

38、10, 11, 12, 13, 14, 15, 16, 17, 18, 19 L:50, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95前10个数,每两个取一个: L:10:20, 2, 4, 6, 8所有数,每5个取一个:第72页,共93页。5.组合数据类型的高级特性5.1切片tuple切片、字符串切片tuple也是一种list,唯一区别是tuple不可变。因此,tuple也可以用切片操作,只是操作的结果仍是tuple。 (0, 1, 2, 3, 4, 5):3(0, 1, 2)字符串xxx也

39、可以看成是一种list,每个元素就是一个字符。因此,字符串也可以用切片操作,只是操作结果仍是字符串。 ABCDEFG:3ABC ABCDEFG:2ACEG第73页,共93页。5.组合数据类型的高级特性5.2迭代可迭代对象的迭代列表这种数据类型有下标,但很多其他数据类型是没有下标的,但是,只要是可迭代对象,无论有无下标,都可以迭代。第74页,共93页。5.组合数据类型的高级特性5.2迭代可迭代对象的迭代字典的迭代 d = a: 1, b: 2, c: 3 for key in d: print(key)acb由于字典是无序的,因此迭代出的结果顺序可能与上述结果不一样。默认情况下,dict迭代的是

40、key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k, v in d.items()。第75页,共93页。5.组合数据类型的高级特性5.2迭代可迭代对象的迭代集合的迭代 s=set(1,2,3,4) s1, 2, 3, 4 for x in s:print(x)1234第76页,共93页。5.组合数据类型的高级特性5.2迭代可迭代对象的迭代字符串的迭代 for ch in ABC: print(ch)ABC所以,当我们使用for循环时,只要作用于一个可迭代对象,for循环就可以正常运行,而我们不用太关心该对象究竟

41、是list还是其他数据类型。第77页,共93页。5.组合数据类型的高级特性5.2迭代Iterable类型对于一个对象,通常是通过collections模块的Iterable类型判断该对象是否是一个可迭代的对象,如: from collections import Iterable isinstance(abc, Iterable# str是否可迭代True isinstance(1,2,3, Iterable)# list是否可迭代True isinstance(123, Iterable)# 整数是否可迭代False第78页,共93页。5.组合数据类型的高级特性5.2迭代列表实现下标循环如果

42、要对list实现类似Java那样的下标循环,要怎么办呢?Python内置的enumerate函数可以把一个list变成索引元素对,这样就可以在for循环中同时迭代索引和元素本身。 for i, value in enumerate(A, B, C): print(i, value)0 A1 B2 C第79页,共93页。5.组合数据类型的高级特性5.3列表生成式一层循环 list(range(1, 11)1, 2, 3, 4, 5, 6, 7, 8, 9, 10要生成list 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,可以用list(range(1, 11): L = for

43、x in range(1, 11): L.append(x * x) L1, 4, 9, 16, 25, 36, 49, 64, 81, 100但如果要生成11, 22, 33, 1010,可使用下列语句。第80页,共93页。5.组合数据类型的高级特性5.3列表生成式一层循环 x * x for x in range(1, 11)1, 4, 9, 16, 25, 36, 49, 64, 81, 100利用列表生成式可以用一行语句代替循环生成上面的list。 x * x for x in range(1, 11) if x % 2 = 04, 16, 36, 64, 100for循环后面还可以加

44、上if判断,这样我们就可以筛选出仅偶数的平方。第81页,共93页。5.组合数据类型的高级特性5.3列表生成式一层循环 L = Hello, World, IBM, Apple s.lower() for s in Lhello, world, ibm, apple另外,也可把一个list中所有的字符串变成小写:第82页,共93页。5.组合数据类型的高级特性5.3列表生成式两层循环 m + n for m in ABC for n in XYZAX, AY, AZ, BX, BY, BZ, CX, CY, CZ下面看一个两层循环的例子。上例同时执行for m in ABC循环和for n in

45、XYZ循环,然后再执行m+n。第83页,共93页。5.组合数据类型的高级特性5.4生成器通过列表生成式,我们可以直接创建一个列表。但由于计算机内存有限,当生成一个列表时,由于受到计算机内存容量的限制,我们需要使用合理的方法生成列表。例如,对于一个包含百万数目的列表,无法直接创建该列表。如果该列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?答案是肯定的,而这样做的好处是不必创建完整的list,可以节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器(generator)。第84页,共93页。5.组合数据类型的高级特性5.4生成器简单生成器

46、要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的改成(),就创建了一个generator。 L = x * x for x in range(10) L0, 1, 4, 9, 16, 25, 36, 49, 64, 81 g = (x * x for x in range(10) ggenerator object at 0 x1022ef630第85页,共93页。5.组合数据类型的高级特性5.4生成器带yield语句的生成器如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator。这里最难理解的就是generator和函数的执行流程不一样。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而generator函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。第86页,共93页。5.组合数据类型的高级特性5.4生成器递归生成器 def flatten(nested):try:#不要迭代类似字符串的对象try:nested+except TypeError:passelse:raise TypeErrorfor sublist in nested:for element in flatte

温馨提示

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

评论

0/150

提交评论