资源描述
内衮提纲6.1 序列概览06.2 通用序列操作6.3 列表0O6.4 元组6.5 小结O引例治引例如右表所示是联想电脑 某年在各地区的销售情 况。现在问题是:(1)编程求出各地区 的销售总量及销售的平 均数量;(2)求出所有大于平 均数的那些数值。地区联想电脑广州123333深圳94564珠海85677中山67777佛山45646北京96786上海120078海南35555成都234456J序列概览:列表的特点 列表是一种序列 列表可以包含其他元素,而不仅仅包含字符。列表是可变类型。列表是可以嵌套的,列表中又可以嵌套一个或多个列6.1列表概览:.列表的举例 列表的创建 aList=bList=1,2,3,4,5 123,4,5 二维列表2,3 不同数据类型 bList=VK True,/.12,1,2,3 bList OK,True,1.12,1,2,3 weekdays=Sun;Mon,Tue,Wed;Thu,FriSat6.2通用列表操作 6.2.1索引 序列中所有的元素都是有序列号的,也就是所谓的索 引。索引是从0开始的,我们可以通过索引号对序列中 的元素进行访问。AList=c hr(i)for i in range(65,91)表6-2列表结构NEC XYZ01223242526-25-24 -3-2-1 6.2.1索引【例6-1】编写一段程序,输入月份(112的数字),然 后打印出相应的月份英文拼写。程序如下:months=,January February,Marc h,April,May,【uneJJul y,August,September,Oc tober7November,Dec ember,whil e True:month_num=int(input(“请输入月份:”)if month_num!=0:print(你输入的是5”171。11m5171011m_171-1)el se:break 6.2.2分片 访问一定范围的数据元素,可以使用分片操作。分片通过冒号相隔的两个索引来实现。例如:address=5http:/www.ptpress.c om.c n address7:24 www.ptpress.c om.c n address11:-7,ptpress,6.2通用序列操作 6.2.2分片分片操作的实现需要提供两个索引作为边界,第1个索 引的元素是包含在分片内的,而第2个则不包含在分片 内。numbers=1,2,3,4,5,6,7,8,9,10 numbers2:5 2,3,4,5 numbers0:1 1-可以看出,分片的内容不包括第2个索引。6.2通用序列操作:6.2.2 分片可以通过负数进行分片:numbers-3:-1 8,9如果分片所得部分包括序列结尾的元素,那么,只需 置空最后一个索引即可。numbers-3:8,9,10这种方法同样适用于序列开始的元素。numbers:3 1,2,36.2通用序列操作 6.2.2分片如果需要复制整个序列,可以将两个索引都置空。newnumbers=numbers:newnumbers 1,2,3,4,5,6,7,8,9,10在进行分片的时候,除了这两个参数外,另外还有一 个参数是步长,默认步长是1。numbers0:10:2 1,3,5,7,96.2通用序列操作:6.2.2 分片倒序显示列表,可以这么操作:numbers:-1 10,9,8,7,6,5,4,3,2,1倒序显示奇数项或者偶数项 numbers-2:-2 9,7,5,3,1 numbers-1:0:-2 10,8,6,4,2 6.2.2分片-分片总结:1)开始点的元素(最左边元素)包括在结果之中,而结 束点的元素(最右边的元素)则不在分片之内。2)分片的步长是正数,那么开始点一定是小于结束点 的,否则结果就是空;3)分片的步长是负数,那么开始点一定是大于结束点 的。4)开始点与结束点可以是正数表达式或者是负数表达 6.2.2分片【例6-2】对网址进行分割,输入URL,截取它的域名o 主要针对http:www.ryjiaoyu.c om或者是http:www.ryjiaoyu.c n形太的URL进行分割。程序如下:url=input(npl ease enter the URL:)if url-3=?:domain=url 11:-3 el se:domain=url 11:-4 print(,Domain nameZ+domain)6.2通用序列操作$62.3列表的运算在列表中可以进行加法(+)运算和乘法(*)运算,得到的 结果与字符串上的使用是类似的 1.列表相加 123+4,5,6 1,2,3,4,5,6列表只能对列表进行操作,列表对其他的操作都是错 误的 hel l o+pPython Trac ebac k(most rec ent c al l l ast):Fil e HH5 l ine 1,in ,hel l o,+,Python,TypeError:Cant c onvert l ist objec t to str impl ic itl y6.2通用序列操作6.2.3列表的运算 2.列表相乘 a=1,2,3 a*3 1,2,3,1,2,3,1,2,36.2通用序列操作cmU 6.2.3列表的运算-3.None、空列表和初始化 NoneList=None*10 NoneList None,None,None,None,None,None,None,None,None,None6.2通用序列操作 6.2.3列表的运算 4.列表的比较:两个列表之间使用,、V、=、=、v=和!=符号。列表的比较是从第一个元素开始的。如果第一个元素相 同,则继续比较列表中的第二个元素,以此类推,直到 比出大小为止,或者相等。1,2,3 1,2,3,01,2,3 True6.2通用序列操作6,2.3列表的运算 5.运算符in 为了检查一个值是否在序列中,可以使用in运算符。这 个运算符检查某个条件是否为真,然后返回相应的值:条 件为真返回True,条件为假返回Fal se。a in raWc True W in PaVbYC Fal se6.2通用序列操作$6,2,3列表的运算【例6-3】设置用户登录系统,提示用户输入用户名与 密码,如果正确,发出正确提示,如果不正确,发出 错误提示。以下是程序示例:l DataBase=,zhao12345,qian,522345,sun2334,Li,42342-usr=input(fEnter your name:)3-pwd=int(input(nEnter your password:)4-if usr,pwd in DataBase:5-print(nWel c ome to you!”)6-el se:7.print(Ac c ess denied!。6.2通用序列操作 6.24列表的常用函数常用内建函数l en、min和max numbers=1,2,3,4,5,6,7,8,9,10 l en(numbers)10 max(numbers)10 min(numbers)1 word=l ist(,python)word p,V,R6.3列表对象 6.3.1基本的列表操作 1.改变列表:元素赋值 改变列表需要使用普通的赋值语句。numbers0=100 numbers 100,2,3,4,5,6,7,8,9,106.3列表对象 2.删除元素删除元素是使用del的方法来实现的。删除该元素之后,原来列表的长度也会自动更新。del numbersO numbers 2,3,4,5,6,7,8,9,106.3列表对象 3.分片赋值分片赋值操作如下:name=l ist(,Wang,)name W7aLi name1:=l ist(,hua,)name W,h,I,a分片赋值时,可以使用 与原序列不等长的序列 将分片替换:name=l ist(Peter,)name1:=l ist(,ython,)name P,V,R h”,h6.3列表对象 3.分片赋值分片赋值语句可以在不 需要替换任何原有元素的情况下插入新的元素O numbers=13 5 numbers1:1=2,3,4 numbers1,2,3,4,5这个程序只是“替换”了 一个空的分片,因此实际 的操作是插入了一个序列O以此类推,通过分片赋 值来删除元素也是可行的O numbers1,2,3,4,5 numbersl:4=numbers 口,56.3列表对象 6-3.2列表方法 1.append append方法是在列表 中新增加一项元素。增 加之后,列表的长度增 加1。numList=1,2,3,4 numList.append(5)numList 1,2,3,4,5 2.c ount Count用于统计某个元素 在列表中出现的次数。aList=123,xyz,zara,abc1,123;aList.c ount(123)2 aList.c ount(,zara,)16.3列表对象 6-3.2列表方法 3.extend extend方法可以在列表的末尾一次性追加另一个序列 中的多个值。换句话说,可以用新列表扩展原有的列 表。aList=123 JxyzJzara7abe:123 bList=2009,manni al ist.extend(bList)aList.extend(bList)aList 123,xyz,zara,abc,123,2009,manni96.3列表对象 6-3.2列表方法 4.index index方法是返回查找对象的索引位置,如果没有找到 对象则会抛出异常。aList.index(,zara)2 aList.index(,zhang)Trac ebac k(most rec ent c al l l ast):Fil e”vpyshel l#101,l ine 1,in aList.index(,zhang,)Val ueError:zhang is not in l ist 6.3.2列表方法 5.insert insert用于把对象元素插入到指定的列表位置,同时,列表增加多一个对象。aList=123,xyzJzara,abc aList.insert(3,321)aList 123xyzzara,321,abc 6.3.2列表方法 6.pop pop方法会移除列表中的一个元素(默认是最后一个),并且返回该元素的值:aList.pop()abc aList.pop()zara aList 123/xyz6.3列表对象 6.3.2列表方法 7.removeremove方法用于移除列表中某个值的第一个匹配项。aList=123JxyzJzaraJabc,xyz aList.remove(xyz)aList 123/zaraJabcxyz 6.3.2列表方法 8.reverse reverse方法是将列表中的元素反向存放。numList=1,2,3 numList.reverse()numList 3,2,1 6.3,2列表方法 9.sort sort方法用于对原列表进行排序。numbers=3,9,6575254 numbers.sort()numbers 2,3,4,6,7,9如果要从大到小排列列表中的数据元素,可以修改sort 中的reverse参数。numbers.sort(reverse=T rue)numbers 9,7,6,4,3,2 6.3.2列表方法 10.spl it与join fWe are teac hers1.spl it()We,are,teac hers可以使用参数作为分隔符。www.ptpress.c om.c n.spl it,.)www5,ptpress5,c om5,c n596.3列表对象 6-3.2列表方法 10.spl it与join join函数与spl it函数正好是相反的功能。spl it函数把字 符串进行分片,产生列表。join函数以某种分隔符作为 主调对象,把列表中的字符连接起来。words=,www.ptpress.c om.c n,.spl it(7)words fwww tpress1,c om fc n address=7.join(words)address www.ptpress.c om.c rT6.3列表对象 6.3.3列表解析列表解析是Python迭代机制的一种应用,它常用于实 现创建新的列表,-它的表达形式是这样的:expression for iter_val in iterabl e if c ond_expr例如,如果想得到020的奇数列表,可以使用range 来生成020的数字,然后检查用2除的余数部分不等 于0,来判定数字是否为偶数。i for i in range(1,20)if i%2!=0 1,3,5,7,9,11,13,15,17,1966.3列表对象 6-3-3列表解析可以用于字符串的应用,比如有两个字符串,strA=,abc defg,strB=,defghijk,o 如果要得到两个字符 串的交集,就可以这么表示:strA=nabc defgn strB=,defghijk c har for c har in strA if c har in strB R g96.3列表对象 6-3-3列表解析可以从多个序列中,采用复杂条件来得表列表。例如 要生成笛卡尔坐标对,x在02的范围内,y在04的 范围内,仅当xy。(x,y)for x in range(3)for y in range(4)if xy(1,0),(2,0),(2,1)元组也是一种序列,与列表很相似。唯一的不同是元 组不能修改。创建元组的语法很简单,只要在数值之 间加上逗号,就可以创建元组。1,2,3(1,2,3)空元组可以用没有包含内容的两个圆括号来表示。0 0那么如何实现包括一个值的元组呢?只要加上一个逗 号就可以,即使只有一个值。123,(123,)6.4元组:不可变序歹!6.4.1 tupl e 函数 tupl e函数的功能与l ist函数基本上是一样的:以一个序 列作为参数并把它转换为元组。如果参数就是元组,那么该参数就会被原样返回。tupl e(23)(T,2,3)tupl e(,a,;b,;c,)(a,b,c)6.4元组:不可变序歹!64.2基本元组操作 1.“+”和“*”运算 (1,2,3)+(4,5,6)(1,2,3,4,5,6)(123)*3(1,2,3,1,2,3,1,2,3)2.元组的分片操作 myTupl e=(1,2,3)myTupl e1 2 myTupl e1:3(2.3)6.4元组:不可变序歹!6.4.2基本元组操作3.元组的in操作 2 in myTupl e True 4 in myTupl e Fal se4.求元组的长度、最大值、最小值 l en(myTupl e)3 max(myTupl e)3 min(myTupl e)1 6.4.3为什么需要元组主要原因就是元组的这种不可变性。因为元组是不可 改变的,所以可以为需要的地方提供不可变对象。我 们以后在学习字典类型时,会发现字典的键必须是不 可变的,因此元组可以用作字典的键,而列表不能。【例6-4】分析我有一个梦想文本,主要完成以下几个方面的工作。(1)分析文件的长度,统计单词的个数。-(2)获取文件中只出现一次的单词数。本文节选了马丁路德金我有一个梦想演讲稿中的 一部分内容作为示例。1.我有一个梦想演讲稿的长度6.5列表应用举例:文彳肝3 思路:首先打开文件,逐行读取文件内容。将每行内 容读入一个临时变量中,然后再通过spht方法来抽取单 词并放入列表,再通过extend的方法将每一行的列表 汇总到新的列表中。算法如下。(1)打开文件进行读取。(2)初始化演讲列表。(3)对文件中的每一行进行处理。把每一行打散,并放入一个列表中。将列表汇总到演讲列表中。(4)获取演讲列表的长度。6.5列表应用举例:文件分析筝2.我有一个梦想的不重复的单词演说中到底有多少个不同的单词?如何解决这个问题?可以先建立独立单词列表,然后再统计该列表的长 度就可以了。算法如下。(1)初始化独立单词列表。(2)对演讲中的每个单词进行处理。如果该单词不在列表中。将单词添加到列表中。6.5本章小结 1.序列是一种数据结构,它包含的元素都进行了编号(从o 开始)。典型的序列包括列表、字符串和元组。2,列表是可变的,而元组和字符串是不可变的。通过分片 操作可以访问序列的一部分,其中分片需要两个索引号来 指出分片的起始和结束位置。3.要想改变列表,则要对相应的位置进行赋值,或者使用 赋值语句重写整个分片。4.in操作符可以检查一个值是否存在于序列中。对字符串 使用in操作符是一个特例它可以查找子字符串。5.列表解析提供了一种优雅的生成列表的方法,能用一行 代码代替十几行代码,而且不损失任何可读性。6.利用增量方式展示了如何开发程序,这是一个解决问题 的常用技巧。
展开阅读全文