1、Python3基础教程第2版 慕课版第4章组合数据类型本章主要内容:集合列表元组字典迭代和列表解析4.1 集合 集合(set)是Python 2.4引入的一种类型。集合常量用大括号表示,例如,1,2,3。集合中的元素具有唯一、无序和不可改变等特点。集合支持数学理论中的各种集合运算。本节主要内容:集合常量 集合运算 集合基本操作 冻结集合4.1.1 集合常量 集合常量用大括号表示,也可用内置的set()函数创建集合对象 示例代码如下。x=1,2,3#直接使用集合常量 x1,2,3 type(x)#测试集合对象的类型名称 set(1,2,3)#用集合常量做参数创建集合对象1,2,3 set(1,2
2、,3)#用列表常量做参数创建集合对象1,2,3 set(123abc)#用字符串常量做参数创建集合对象a,3,b,c,2,1 set()#创建空集合set()type()#表示空字典对象集合中的元素不允许有重复值在创建集合对象时,Python会自动去掉重复值示例代码如下。1,1,2,21,2 set(1,1,2,2)1,2Python 3.0还引入了集合解析构造方法,示例代码如下。x for x in 1,2,3,41,2,3,4 x for x in abcdc,a,b,d x*2 for x in 1,2,3,416,1,4,9 x*2 for x in abcdaa,bb,cc,dd4.
3、1.2 集合运算 集合对象支持求长度、判断包含、求差集、求并集、求交集、求对称差和比较等运算,示例代码如下。x=1,2,a,bc y=1,a,5 len(x)#求长度:计算集合中元素的个数4 a in x#判断包含:判断集合是否包括数据True x y#求差集:用属于x但不属于y的元素创建新集合2,bc x|y#求并集:用x、y两个集合中的所有元素创建新集合1,2,a,bc,5 x&y#求交集:用同时属于x和y的元素创建新集合1,a x y#求对称差:用属于x但不属于y以及属于y但不属于x的元素创建新集合2,5,bc x 1,2 x=1,2 y=x.copy()#复制集合对象 y1,2 x.a
4、dd(abc)#为集合添加一个元素 x1,2,abc x.update(10,20)#为集合添加多个元素 x1,2,10,20,abc x.remove(10)#从集合中删除指定元素 x1,2,20,abc x.remove(50)#删除不存在元素时会报错Traceback(most recent call last):File,line 1,in KeyError:50 x.discard(20)#从集合中删除指定元素 x1,2,abc x.discard(50)#删除不存在元素时不报错 x.pop()#从集合中随机删除一个元素,并返回该元素。1 x2,abc x.clear()#删除集合中
5、的全部元素 xset()集合可用for循环执行迭代操作,示例代码如下。x=1,2,3 for a in x:print(a)123 集合元素是不可改变的,因此不能将可变对象放入集合中。集合、列表和字典对象均不能加入集合。元组可以作为一个元素加入集合。x=1,2 x1,2 x.add(1)#不能将集合对象加入集合Traceback(most recent call last):File,line 1,in x.add(1)TypeError:unhashable type:set x.add(1,2,3)#不能将列表对象加入集合Traceback(most recent call last):F
6、ile,line 1,in x.add(1,2,3TypeError:unhashable type:list x.add(Mon:1)#不能将字典对象加入集合Traceback(most recent call last):File,line 1,in x.add(Mon:1)TypeError:unhashable type:dict x.add(1,2,3)#可以将元组加入集合 x1,2,(1,2,3)4.1.4 冻结集合Python提供了一种特殊的集合冻结集合(frozenset)冻结集合是一个不可改变的集合,可将其作为其他集合的元素。冻结集合的输出格式与普通集合不同,x=frozen
7、set(1,2,3)#创建冻结集合 print(x)#输出冻结集合frozenset(1,2,3)y=set(4,5)y.add(x)#将冻结集合作为元素加入另一个集合 yfrozenset(1,2,3),4,5 x.add(10)#试图为冻结集合添加元素会发生错误Traceback(most recent call last):File,line 1,in x.add(10)AttributeError:frozenset object has no attribute add4.2 列表列表和元组都属于序列,序列支持索引、分片和合并等操作。字符串属于特殊的不可变序列。本节主要内容:列表基本
8、特点 列表基本操作 常用列表方法4.2.1 列表基本特点和操作列表常量用方括号表示,例如,1,2,abc列表的主要特点如下。列表可以包含任意类型的对象:数字、字符串、列表、元组或其他对象。列表是一个有序序列。与字符串类似,可通过位置偏移量执行索引和分片操作。列表是可变的。列表的长度可变,即可添加或删除列表成员。列表元素的值也可改变。每个列表元素存储的是对象的引用,而不是对象本身,类似于C/C+的指针数组。1创建列表 列表对象可以用列表常量或list()函数来创建,示例代码如下。#创建空列表对象 list()#创建空列表对象 1,2,3#用同类型数据创建列表对象1,2,3 1,2,(a,abc)
9、,12,34#用不同类型的数据创建列表对象1,2,(a,abc),12,34 list(abcd)#用可迭代对象创建列表对象a,b,c,d list(range(-2,3)#用连续整数创建列表对象-2,-1,0,1,2 list(1,2,3)#用元组创建列表对象1,2,3 x+10 for x in range(5)#用解析结构创建列表对象10,11,12,13,142求长度可用len()函数获得列表长度,示例代码如下。len()0 len(1,2,(a,abc),3,4)43合并加法运算可用于合并列表,示例代码如下。1,2+abc,201,2,abc,204重复乘法运算可用于创建具有重复值的
10、列表,示例代码如下。1,2*31,2,1,2,1,25迭代迭代操作可用于遍历列表元素,示例代码如下。x=1,2,(a,abc),12,34 for a in x:print(a)12(a,abc)12,346关系判断可用in操作符判断对象是否属于列表,示例代码如下。2 in 1,2,3True a in 1,2,3False7索引 与字符串类似,可通过位置来索引列表元素,也可通过索引修改列表元素。x=1,2,a,b x0#输出列表的第1个数据 1 x2#输出列表的第3个数据 a,b x-1#用负数从列表末尾开始索引 a,b x2=100#修改列表的第3个数据 x 1,2,1008分片与字符串类
11、似,可通过分片来获得列表中的连续多个数据。也可通过分片将连续多个数据替换成新的数据。x=list(range(10)#创建列表对象 x0,1,2,3,4,5,6,7,8,9 x2:5#返回分片列表2,3,4 x2:#省略分片结束位置时,分片直到列表结束2,3,4,5,6,7,8,9 x:5#省略分片开始位置时,分片从第1个数据开始0,1,2,3,4 x3:10:2#指定分片时偏移量步长,步长为23,5,7,9 x3:10:-2#步长为负数时,按相反顺序获得数据 x10:3:-29,7,5 x2:5=abc#通过分片替换多个数据 x0,1,a,b,c,5,6,7,8,9 x2:5=10,20#通
12、过分片替换多个数据 x0,1,10,20,5,6,7,8,94.2.2 常用列表方法1添加单个数据append()方法用于在列表末尾添加一个数据。x=1,2 x.append(abc)x1,2,abc2添加多个数据extend()方法用于在列表末尾添加多个数据,参数为可迭代对象。x=1,2 x.extend(a,b)#用列表对象作参数 x1,2,a,b x.extend(abc)#用字符串作参数时,每个字符作为一个数据 x1,2,a,b,a,b,c3插入数据insert()方法用于在指定位置插入数据,示例代码如下。x=1,2,3 x.insert(1,abc)x1,abc,2,34按值删除数据
13、remove()方法用于删除列表中的指定值。如果有重复值,则删除第1个,示例代码如下。x=1,2,2,3 x.remove(2)x1,2,35按位置删除pop()方法用于删除指定位置的对象,省略位置时删除列表最后一个对象,同时返回删除对象。x=1,2,3,4 x.pop()#删除并返回最后一个对象4 x1,2,3 x.pop(1)#删除并返回偏移量为1的对象2 x1,36用del语句删除可用del语句删除列表中的指定数据或分片,示例代码如下。x=1,2,3,4,5,6 del x0#删除第1个数据 x2,3,4,5,6 del x2:4#删除偏移量为2、3的数据 x2,3,67删除全部数据cl
14、ear()方法可删除列表中的全部数据,示例代码如下。x=1,2,3 x.clear()x8复制列表copy()方法可以复制列表对象,示例代码如下。x=1,2,3 y=x.copy()y1,2,39列表排序sort()方法可将列表排序。若列表对象全部是数字,则按数字从小到大排序。若列表对象全部是字符串,则按字典顺序排序。若列表包含多种类型,则会出错示例代码如下。x=10,2,30,5 x.sort()#对数字列表排序 x2,5,10,30 x=bbc,abc,BBC,Abc x.sort()#对字符串列表排序 xAbc,BBC,abc,bbc x=1,5,3,bbc,abc,BBC x.sort
15、()#对混合类型列表排序时出错Traceback(most recent call last):File,line 1,in x.sort()TypeError:unorderable types:str()int()sort()方法通过按顺序使用“def getv(a):#返回字典中第1个“键:值”对中的值.b=list(a.values().return b0.x=price:20,price:2,price:12 x.sort(key=getv)#按列表中每个字典的第1个“键:值”对中的值排序 xprice:2,price:12,price:20sort()方法默认按从小到大排序,还可用
16、reverse参数指定按从大到小排序。b=12,5,9,8 b.sort(reverse=True)#从大到小排序 b12,9,8,5 x.sort(key=getv,reverse=True)#从大到小排序 xprice:20,price:12,price:210反转顺序可用reverse()方法将列表中数据的位置反转。x=1,2,3 x.reverse()x3,2,14.3 元组元组可以看作是不可变的列表,它具有列表的大多数特点。元组常量用圆括号表示,例如:(1,2)、(a,b,abc)本节主要内容:元组的特点和操作 元组的方法4.3.1 元组的特点和操作元组的主要特点如下。元组可包含任意
17、类型的对象。元组是有序的。元组中的对象可通过位置进行索引和分片。元组的大小不能改变,即不能为元组添加对象,也不能删除元组中的对象。元组中的对象也不能改变。元组中存储的是对象的引用,而不是对象本身。1创建元组 可用元组常量或tuple()方法来创建元组对象,示例如下。()#创建空元组对象()tuple()#创建空元组对象()(2,)#包含一个对象的元组,不能缺少逗号(2,)(1,2.5,abc,1,2)#包含不同类型对象的元组(1,2.5,abc,1,2)1,2.5,abc,1,2#元组常量可以省略括号(1,2.5,abc,1,2)(1,2,(a,b)#元组可以嵌套元组(1,2,(a,b)tup
18、le(abcd)#用字符串创建元组,可迭代对象均可用于创建元组(a,b,c,d)tuple(1,2,3)#用列表创建元组(1,2,3)tuple(x*2 for x in range(5)#用解析结构创建元组(0,2,4,6,8)2求长度len()函数可用于获得元组长度,示例代码如下。len(1,2,3,4)43合并加法运算可用于合并多个元组,示例代码如下。(1,2)+(ab,cd)+(2.45,)(1,2,ab,cd,2.45)4重复乘法运算可用于合并多个重复的元组,示例代码如下。(1,2)*3(1,2,1,2,1,2)5迭代可用迭代方法遍历元组中的各个对象,示例代码如下。for x in(
19、1,2.5,abc,1,2):print(x)12.5abc1,26关系判断in操作符可用于判断对象是否属于元组,示例代码如下。2 in(1,2)True 5 in(1,2)False7索引和分片可通过位置对元组对象进行索引和分片,示例代码如下。x=tuple(range(10)x(0,1,2,3,4,5,6,7,8,9)x11 x-19 x2:5(2,3,4)x2:(2,3,4,5,6,7,8,9)x:5(0,1,2,3,4)x1:7:2(1,3,5)x7:1:-2(7,5,3)4.3.2 元组的方法1count()方法 count()方法用于返回指定值在元组中出现的次数,示例如下。x=(1
20、,2)*3 x(1,2,1,2,1,2)x.count(1)#返回1在元组中出现的次数3 x.count(3)#元组不包含指定值时,返回002index(value,start,end)方法 未用start和end指定范围时,返回指定值在元组中第一次出现的位置;指定范围时,返回指定值在指定范围内第一次出现的位置。x=(1,2,3)*3 x(1,2,3,1,2,3,1,2,3)x.index(2)#默认查找全部元组1 x.index(2,2)#从偏移量2到元组末尾查找4 x.index(2,2,7)#在范围2:7内查找4 x.index(5)#如果元组不包含指定的值,则出错Traceback(m
21、ost recent call last):File,line 1,in x.index(5)ValueError:tuple.index(x):x not in tuple4.4 字典 字典是一种无序的映射集合,包含一系列的“键:值”对。字典常量用大括号表示,例如,name:John,age:25,sex:male。其中,字符串“name”“age”和“sex”为键,字符串“John”和“sex”以及数字25为值。本节主要内容:字典的特点和操作 字典常用方法 字典视图4.4.1 字典的特点和操作字典的主要特点如下。字典的键名称通常采用字符串,也可以用数字、元组等不可变的类型。字典的值可以是任
22、意类型。字典也可称为关联数组或散列表,它通过键映射到值。字典是无序的,它通过键来访问映射的值,而不是通过位置来索引。字典属于可变映射,可修改键映射的值。字典长度可变,可为字典添加或删除“键:值”对。字典可以任意嵌套,即键映射的值可以是一个字典。字典存储的是对象的引用,而不是对象本身。1创建字典#创建空字典 dict()#创建空字典 name:John,age:25,sex:male#使用字典常量sex:male,age:25,name:John book:Python编程:100,C+入门:99#使用嵌套的字典book:C+入门:99,Python编程:100 1:onw,2:two#将数字作
23、为键1:onw,2:two (1,3,5):10,(2,4,6):50#将元组作为键(1,3,5):10,(2,4,6):50 dict(name=Jhon,age=25)#使用赋值格式的“键:值”对创建字典age:25,name:Jhon dict(name,Jhon),(age,25)#使用包含“键:值”对元组的列表创建字典name:Jhon,age:25 dict.fromkeys(name,age)#创建无映射值的字典,默认值为Noneage:None,name:None dict.fromkeys(name,age,0)#创建值相同的字典age:0,name:0 dict.fromk
24、eys(abc)#使用字符串创建无映射值的字典b:None,a:None,c:None dict.fromkeys(abc,10)#使用字符串和映射值创建字典b:10,a:10,c:10 dict.fromkeys(abc,(1,2,3)a:(1,2,3),b:(1,2,3),c:(1,2,3)dict(zip(name,age,John,25)#使用zip解析“键:值”列表创建字典age:25,name:John x=#先创建一个空字典 xname=John#通过赋值添加“键:值”对 xage=25 xage:25,name:John2求长度len()函数可返回字典长度,即“键:值”对的个数
25、。len(name:John,age:25,sex:male)33关系判断in操作符可用于判断字典是否包含某个键。name in name:John,age:25,sex:maleTrue date in name:John,age:25,sex:maleFalse4索引 字典可通过键来索引其映射的值,示例代码如下。x=book:Python编程:100,C+入门:99,publish:人民邮电出版社 xbookC+入门:99,Python编程:100 xpublish人民邮电出版社 xbookPython编程#用两个键索引嵌套的字典元素100可通过索引修改映射值,示例代码如下。x=dict(
26、name=Jhon,age=25)xage:25,name:Jhon xage=30#修改映射值 xage:30,name:Jhon xphone=17055233456#为不存在的键赋值,为字典添加“键:值”对 xphone:17055233456,age:30,name:Jhon也可通过索引删除键值对,示例代码如下。x=name:John,age:25 del xname#删除“键:值”对 xage:254.4.2 字典常用方法1clear()删除全部字典对象,示例代码如下。x=dict(name=Jhon,age=25)x.clear()x2copy()复制字典对象,示例代码如下。x=n
27、ame:John,age:25 y=x#直接赋值时,x和y引用同一个字典 yname:John,age:25 yname=Curry#通过y修改字典 x,y#显示结果相同(age:25,name:Curry,age:25,name:Curry)y is x#判断是否引用相同对象True y=x.copy()#y引用复制的字典 yname=Python#此时不影响x的引用 x,y(age:25,name:Curry,age:25,name:Python)y is x#判断是否引用相同对象False3get(key,default)get()方法返回键key映射的值。如果键key不存在,返回空值。
28、可用default参数指定键不存在时的返回值。x=name:John,age:25 x.get(name)#返回映射值John x.get(addr)#不存在的键返回空值 x.get(addr,xxx)#不存在的键返回指定值xxx4pop(key,default)pop()方法从字典中删除“键:值”对,并返回映射值。若键不存在,则返回default。若键不存在且未指定default参数时,删除键会出错。x=name:John,age:25 x.pop(name)#删除键并返回映射值John xage:25 x.pop(sex,xxx)#删除不存在的键,返回default参数值xxx x.pop
29、(sex)#删除不存在的键,未指定default参数,出错Traceback(most recent call last):File,line 1,in x.pop(sex)KeyError:sex5popitem()popitem()方法从字典删除“键:值”对,同时返回“键:值”对元组。空字典调用该方法会产生KeyError错误。x=name:John,age:25 x.popitem()#删除“键:值”对并返回元组(age,25)x#x中剩余一个“键:值”对name:John x.popitem()#删除“键:值”对并返回元组(name,John)x#x为空字典 x.popitem()#空
30、字典产生KeyError错误Traceback(most recent call last):File,line 1,in x.popitem()KeyError:popitem():dictionary is empty6setdefault(key,default)setdefault()方法用于返回映射值或者为字典添加“键:值”对。指定的键key在字典中存在时,返回映射值。若指定的键key不存在,则将“键:值”对“key:default”添加到字典。省略default时,映射值默认为None。x=name:John,age:25 x.setdefault(name)#返回指定键的映射值J
31、ohn x.setdefault(sex)#键不存在,为字典添加“键:值”对,映射值默认为None xsex:None,age:25,name:John x.setdefault(phone,123456)#添加“键:值”对123456 xsex:None,phone:123456,age:25,name:John7update(other)update()方法用于为字典添加“键:值”对。参数other可以是另一个字典或用赋值格式表示的元组。若字典已存在同名的键,则映射值被覆盖。x=name:John,age:25 x.update(age:30,sex:male)#添加“键:值”对,并覆盖同
32、名键的映射值 x#age的映射值已被修改sex:male,age:30,name:John x.update(name=Mike)#修改映射值 xsex:male,age:30,name:Mike x.update(code=110,address=NewStreet)#添加“键:值”对 xsex:male,address:NewStreet,age:30,code:110,name:Mike4.4.3 字典视图1items()items()方法返回“键:值”对视图,示例代码如下。x=name:John,age:25 y=x.items()#返回“键:值”对视图 y#“键:值”对视图为dict
33、_items对象 dict_items(age,25),(name,John)list(y)#将“键:值”对视图转换为列表(age,25),(name,John)for a in y:print(a)#迭代“键:值”对视图(age,25)(name,John)xage=30#修改字典 xage:30,name:John y#从显示结果可以看出视图反映了字典中的修改内容dict_items(age,30),(name,John)2keys()keys()方法返回字典中所有键的视图,示例代码如下。x=name:John,age:25 y=x.keys()#返回键的视图 y#显示键视图,键视图为di
34、ct_keys对象dict_keys(age,name)xsex=male#为字典添加“键:值”对 xsex:male,age:25,name:John y#显示结果说明键视图包含了新添加的键dict_keys(sex,age,name)list(y)#将键视图转换为列表sex,age,name3values()values()方法返回字典中全部值的视图,示例代码如下。x=name:John,age:25 y=x.values()#返回字典的值视图 y#显示值视图,值视图为dict_values对象dict_values(25,John)xsex=male#添加“键:值”对 y#值视图包含了新
35、添加的值dict_values(male,25,John)list(y)#将值视图转换为列表male,25,John4键视图的集合操作键视图支持各种集合运算,“键:值”对视图和值视图不支持集合运算。x=a:1,b:2 kx=x.keys()#返回x的键视图 y=b:3,c:4 ky=y.keys()#返回y的键视图 kx-ky#求差集a kx|ky#求并集a,b,c kx&ky#求交集b kxky#求对称差集a,c4.5 迭代和列表解析本节主要内容:迭代列表解析zip()、map()和filter()函数4.5.1 迭代字符串、列表、元组和字典等对象均支持迭代操作,可使用迭代器遍历对象。字符串
36、、列表、元组和字典等对象没有自己的迭代器,可调用iter()函数生成迭代器。对迭代器调用next()函数即可遍历对象。next()函数依次返回可迭代对象的元素,无数据返回时,会产生StopIteration异常 d=iter(1,2,3)#为列表生成迭代器 next(d)#返回第1个数据1 next(d)#返回第2个数据2 next(d)#返回第3个数据3 next(d)#无数据可返回,产生异常Traceback(most recent call last):File,line 1,in StopIteration d=iter(1,2,(3,4)#使用迭代器迭代元组 next(d)1 nex
37、t(d)2 next(d)(3,4)d=iter(abc)#使用迭代器迭代字符串 next(d)a next(d)b next(d)c d=iter(name:Jhon,age:25)#使用迭代器迭代字典,字典只能迭代键 next(d)name next(d)age d=iter(name:Jhon,age:25.keys()#迭代字典keys方法返回对象 next(d)age next(d)name d=iter(name:Jhon,age:25.values()#迭代字典values方法返回对象 next(d)25 next(d)Jhon d=iter(name:Jhon,age:25.i
38、tems()#迭代字典items方法返回对象 next(d)(age,25)next(d)(name,Jhon)文件对象支持迭代操作,示例代码如下。mf=open(rD:pytempcode.txt)#打开文件 mf._next_()#读下一行one第一行n mf._next_()#读下一行two第二行n mf._next_()#读下一行three第三行xxx mf._next_()#读下一行,已无数据,出错Traceback(most recent call last):File,line 1,in StopIteration 也可用next()函数来迭代文件对象,示例代码如下。mf=ope
39、n(rD:pytempcode.txt)next(mf)one第一行n next(mf)two第二行n next(mf)three第三行xxx next(mf)Traceback(most recent call last):File,line 1,in StopIteration4.5.2 列表解析列表解析与循环的概念紧密相关,先通过下面的例子了解如何使用for循环来修改列表。t=1,2,3,4 for x in range(4):.tx=tx+10.t11,12,13,14使用列表解析来代替上面例子的for循环。t=1,2,3,4 t=x+10 for x in t t11,12,13,1
40、4列表解析的基本结构如下。表达式 for 变量 in 可迭代对象 if 表达式1带条件的列表解析可以在列表解析中使用if设置筛选条件,示例代码如下。x+10 for x in range(10)if x%2=0#用if筛选偶数10,12,14,16,182.多重解析嵌套列表解析支持嵌套,示例代码如下。x+y for x in(10,20)for y in(1,2,3)11,12,13,21,22,23嵌套时,Python对第1个for循环中的每个x,执行嵌套for循环。用下面的嵌套的for循环来生成上面的列表。a=for x in(10,20):.for y in(1,2,3):.a.appe
41、nd(x+y).a 11,12,13,21,22,23对嵌套的解析,也可以分别使用if执行筛选,示例代码如下。x+y for x in(10,20)if x10 for y in(1,2,3)if y%2=1 21,233列表解析用于生成元组列表解析用于生成元组的示例代码如下。tuple(x*2 for x in range(5)(0,2,4,6,8)tuple(x*2 for x in range(10)if x%2=1)(2,6,10,14,18)4列表解析用于生成集合列表解析用于生成集合的示例代码如下。x for x in range(10)0,1,2,3,4,5,6,7,8,9 x f
42、or x in range(10)if x%2=11,3,5,9,75列表解析用于生成字典列表解析用于生成字典的示例代码如下。x:ord(x)for x in abcdd:100,a:97,b:98,c:99 x:ord(x)for x in abcd if ord(x)%2=0d:100,b:986列表解析用于文件 列表解析用于文件时,每次从文件读取一行数据,示例代码如下。x for x in open(rD:pytempcode.txt)one第一行n,two第二行n,three第三行 x.strip()for x in open(rD:pytempcode.txt)one第一行,two第
43、二行,three第三行 x.strip()for x in open(rD:pytempcode.txt)if x0=ttwo第二行,three第三行7其他的列表解析应用 一些函数中可直接使用可迭代对象,示例代码如下。all(0,2,4,1,3,5)#所有对象都为真时返回TrueFalse any(0,2,4,1,3,5)#有一个对象为真时返回TrueTrue sum(0,2,4,1,3,5)#求和15 sorted(0,2,4,1,3,5)#排序0,1,2,3,4,5 min(0,2,4,1,3,5)#求最小值0 max(0,2,4,1,3,5)#求最大值5 min(open(rD:pyte
44、mpcode.txt)#返回文件中所有行中的最小值one第一行n max(open(rD:pytempcode.txt)#返回文件中所有行中的最大值two第二行n list(open(rD:pytempcode.txt)#将文件内容转换为列表one第一行n,two第二行n,three第三行 set(open(rD:pytempcode.txt)#将文件内容转换为集合one第一行n,two第二行n,three第三行 tuple(open(rD:pytempcode.txt)#将文件内容转换为元组(one第一行n,two第二行n,three第三行)a,b,c=open(rD:pytempcode.
45、txt)#从文件读3行数据依次赋值给变量 a,b,c(one第一行n,two第二行n,three第三行)a,*b=open(rD:pytempcode.txt)#第1行赋值给a,剩余的所有行作为列表赋值给b a,b(one第一行n,two第二行n,three第三行)4.5.3 zip()、map()和filter()1zip()函数zip()函数用于创建zip对象,其参数为多个可迭代对象。生成zip对象时,每次从可迭代对象中取一个值组成一个元组,直到可迭代对象中的值取完,生成的zip对象包含了一系列的元组 x=zip(1,2,3),(10,20,30)#用两个元组参数来生成zip对象 x ne
46、xt(x)#返回zip对象中的下一个值(1,10)next(x)(2,20)next(x)(3,30)next(x)#已无对象,产生StopIteration异常Traceback(most recent call last):File,line 1,in StopIteration x=zip(abc,(1,2,3)#使用一个字符串和一个元组作参数 next(x)(a,1)next(x)(b,2)next(x)(c,3)x=zip(1,2),ab,5,6)#使用多个可迭代对象作参数 next(x)(1,a,5)next(x)(2,b,6)2map()函数 map()函数用于将函数映射到可迭代
47、对象,对可迭代对象中的每个元素应用该函数,函数返回值包含在生成的map对象中。x=map(ord,abc)#用ord函数返回各个字符的ASCII码,生成map对象 x next(x)#返回map对象中的下一个值97 next(x)98 next(x)99 list(map(ord,abc)#用map对象生成列表97,98,993filter()函数 filter()函数与map()函数类似,filter()函数用指定函数处理可迭代对象。若函数返回值为真,则对应可迭代对象元素包含在生成的filter对象。x=filter(bool,(1,-1,0,ab,(),(1,2),1,2,1,2,a:1)#筛选出可转换为真的对象 x next(x)#返回filter对象中的下一个值1 list(x)#将迭代器转换为列表,不包含已迭代的值-1,ab,(1,2),1,2,1,2,a:14.6 综合实例在IDLE中创建一个Python程序,输入4个数,用其创建列表和元组。将这4个数分别按从小到大和从大到小的顺序输出。