Python基础教程 读书笔记(2)第二章 列表和元组
2.1序列概览 列表和元组的主要区别在于,列表可以修改,元组则不能。也就是说如果要根据要求来添加元素,那么列表可能会更好用;而出于某些原因,序列不能修改的时候,使用元组则更为合适。使用后者的理由通常是技术性的,它与Python内部的运作方式有关。这也是内建函数可能返回元组的原因。一般来说,在几乎所有的情况下列表都可以替代元组。 编写一个列表: >>> edward=['Edward Gumby',42] 构建如下的一个人员信息的列表也是可以的,这个列表就是你的数据库: >>> john=['John Simith',50] >>> database=[edward,john] >>> database [['Edward Gumby',42],['John Simith',50]] 2.2通用序列操作 所有序列类型都可以进行某些特定的操作。这些操作包括:索引(indexing)、分片(sliceing),加(adding )、乘(multiplying)以及检查某个元素是否属于序列的成员(成员资格)。除此之外,Python还有计算序列长度、找出最大元素和最小元素的内建函数。 2.2.1索引 序列中的所有元素都是有编号的—从0开始递增。这些元素可以通过编号分别访问: >>> greeting='Hello' >>> greeting[0] 'H' 字符串字面值(就此而言,其他序列字面量亦可)能够直接使用索引,而不需要一个变量引用他们。 >>> 'Hello'[1] 'e' 如果一个函数调用返回一个序列,那么可以直接对返回结果进行索引操作。 >>> fourth=raw_input('Year:')[3] Year: 2025 >>> fourth '5' 实例: #根据给定的年月日以数字形式打印出日期 >>> months=[ 'January', 'February', "March", 'April', 'May', 'June', 'July', 'Augest', 'September', 'October', 'November', 'December' ] #以1一31的数字作为结尾的列表 endings=['st','nd','rd']+17*['th'] +['st','rd']+7*['th'] +['st'] year=raw_input('Year:') month=raw_input('Month(1-12:') day=raw_input('Day(1-31):') month_number=int(month) day_number=int(day) #要将月份和天数减1,以获得正确的索引 month_name=months[month_number-1] ordinal=day+endings[day_number-1] print month_name+''+ordinal+''+year Year: 2015 Month(1-12:>? 5 Day(1-31):>? 13 May13th2015 2.2.2分片 与使用索引来访问单个元素类似,可以使用分片操作来访问一定范围内的元素。 >>> tag='https://d396qusza40orc.cloudfront.net/statistics' >>> tag[23:37] 'cloudfront.net' 分片操作对于提取序列的一部分是很有用的。而编号在这里显得尤为重要。第1个索引是需要提取部分的第1个元素的编号,而最后的索引则是分片之后剩下部分的第1个元素的编号: >>> numbers=[1,2,3,4,5,6,7,8,9] >>> numbers[3:6] [4,6] 简而言之,分片操作的实现需要提供两个索引作为边界,第1个索引的元素是包含在分片内的,而第2个则不包含在分片内。 1.优雅的捷径 假设需要访问最后3个元素(根据先前的例子),那么当然可以进行显式的操作: 如果分片所得部分包括序列结尾的元素,那么,只需置空最后一个索引即可: >>> numbers[-3:] [7,9] 这种方法同样适用于序列开始的元素: >>>numbers[:3] [1,2,3] 2.3列表 2.3.1list函数 >>> list('hello') ['h','e','l','o'] 2.3.2基本的列表操作 1.改变列表:元素赋值 >>> x=[1,1,1] >>> x[1]=2 >>> x [1,1] 2.删除元素 >>> names=['alice','beth','cecil','dee-dee','earl'] >>> del names[2] >>> names ['alice','earl'] 3.分片赋值 >>> name=list('Perl') >>> name ['P','r','l'] >>> name[2:]=list('ar') >>> name ['P','a','r'] 可以使用与原序列不等长的序列将分片替换: >>> name=list('Perl') >>> name[1:]=list('ython') >>> name ['P','y','t','h','o','n'] 可以在不需要替换任何原有元素的情况下插入新的元素 >>> numbers=[1,5] >>> numbers[1:1]=[2,4] >>> numbers [1,5] 2.3列表方法 1.append >>> lst=[1,3] >>> lst.append(4) >>> lst [1,4] 2.count >>> ['to','be','or','not','to','be'].count('to') 2 >>> x=[[1,2],[2,[1,2]]] >>> x.count(1) 2 >>> x.count([1,2]) 1 3.extend >>> a=[1,3] >>> b=[3,5] >>> a.extend(b) >>> a [1,5] >>> a=a+b效果相同 4.index >>> knights=['we','are','the','knights','who','say','ni'] >>> knights.index('who') 4 >>> knights[4] 'who' 5.insect >>> numbers=[1,7] >>> numbers.insert(3,'four') >>> numbers [1,'four',7] 6.pop 移除列表中的一个元素,默认是最后一个 >>> x=[1,3] >>> x.pop() 3 >>> x [1,2] 7.remove >>> x=['to','be'] >>> x.remove('be') >>> x ['to','be'] 8.reverse >>> x=[1,3] >>> x.reverse() >>> x [3,1] 9.sort >>> x=[4,7] >>> x.sort() >>> x [1,7] ? >>> x=[4,7] >>> y=x[:] >>> y.sort() >>> x [4,7] >>> y [1,7] >>> y=x.sort() >>> print y None 应该是: >>> x=[4,7] 获取已排序的列表副本: >>> x=[4,7] >>> y=sorted(x) >>> x [4,7] 10.高级排序 compare(x.y)函数会在x<y时返回负数,在x>y时返回正数,如果x=y则返回0 >>> cmp(40,33) 1 >>> cmp(33,40) -1 >>> numbers=[5,9,7] >>> numbers.sort(cmp) >>> numbers [2,9] 2.4元组:不可变序列 如果你用逗号分隔了一些值,那么你就自动创建了元组。 >>> 1,3 (1,3) >>> ()#空元组 () 2.4.1tuple函数 tuple函数的功能与list函数基本上是一样的:以一个序列作为参数并把它转换 ? 为元组。 >>> tuple([1,3]) (1,3) >>> tuple('abc') ('a','b','c') 2.4.2基本元祖操作 大致和序列类似 2.4.3元组的意义 元组可以在映射(和集合的成员)中当作键使用—而列表则不行元组作为很多内建函数和方法的返回值存在,也就是说你必须对元组进行处理。只要不尝试修改元组,那么,“处理”元组在绝大多数情况下就是把它们当作列表来进行操作(除非需要使用一些元组没有的方法,例如index和count一般来说,列表可能更能满足对序列的所有需求。 2.5小结 cmp(x,y)比较两个值 len(seq)返回序列的长度 list(seq)把序列转换成列表 max(args)返回序列或者参数集合中的最大值 min(args)返回序列或者参数集合中的最小值 reversed(seq)对序列进行反向迭代 sorted(seq)返回已排序的包含seq所有元素的列表 tuple(seq)把序列转换成元组 (编辑:北几岛) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |