Python学习笔记-通用序列操作

来源:互联网 发布:vx什么软件 编辑:程序博客网 时间:2024/06/06 07:39

一、索引
Python中序列的所有元素都是有编号的,从0开始递增。
例如:

#字符串就是由字符组成的序列>>> test = 'NiceDay'>>> test[0]'N'>>> test[10]Traceback (most recent call last):  File "<stdin>", line 1, in <module>IndexError: string index out of range>>> test[-7]'N'

使用负数索引时,Python会从右边,也就是从最后一个元素开始计数。
最后一个元素的位置编号是-1。

字符串的字面值可以直接使用索引:

>>> 'Test'[2]'s'

如果一个函数调用返回一个序列,可以直接对返回结果进行索引操作:

#test取raw_input的首字符>>> test = raw_input('test: ')[0]test: are you ok>>> test'a'

二、分片
分片主要用于获取一定范围内的元素,使用方式如下:

>>> tag = 'today is a nice day'>>> tag[2:6]'day '>>> tag[10:-1]' nice da'

容易看出分片操作需要提供两个索引作为边界,
第1个索引的元素是包含在分片内的,而第2个则不包含在分片内。

需要注意的是:
只要分片最左边的索引比它右边的晚出现在序列中,
结果就是一个空序列。
例如:

>>> numbers = [1, 2, 3, 4]>>> numbers[3:1][]#此时顺序为0, -1, -2, -3#-3仍出现的晚>>> numbers[-3:0][]

2.1 索引为空的情况
当后一个索引为空时,将得到前一个索引之后所有的元素:

>>> num = [1,2,3,4]>>> num[2:][3, 4]

当前一个索引为空时,将得到后一个索引之前所有的元素(不包括该索引):

>>> num = [1,2,3,4]>>> num[:2][1, 2]

当两个索引均为空时,将得到整个序列:

>>> num = [1,2,3,4]>>> num[:][1, 2, 3, 4]

2.2 指定步长的情况
进行分片的时候,分片的开始和结束点需要进行指定(直接指定或间接制定)。
除了这两个参数外,分片还有一个隐式参数—步长(默认为1)。
分片操作就是按照步长逐个遍历序列中的元素,
然后返回开始和结束点之间的所有元素。

>>> num = [1,2,3,4,5,6,7]#第2个冒号后就是步长>>> num[1:6:2][2, 4, 6]# 不长不能为0>>> num[1:6:0]Traceback (most recent call last):  File "<stdin>", line 1, in <module>ValueError: slice step cannot be zero#步长可以为负数,表示从右往左提取元素>>> num[6:2:-1][7, 6, 5, 4]#使用步长时,也可以省略开始、结束节点#正步长时,从头到尾取数#负步长时,从尾到头取数>>> num[::-1][7, 6, 5, 4, 3, 2, 1]>>> num[::][1, 2, 3, 4, 5, 6, 7]

最后总结一下分片的特点:
开始点的元素包括在结果之中,而结束点的元素不在结果中。
当使用正数为步长时,必须让开始点小于结束点;
当使用负数为步长时,必须让开始点大于结束点。

三、序列相加

>>> a = [1,2,3]>>> b = ['1', '2', '3']>>> a + b[1, 2, 3, '1', '2', '3']>>> c = '123'>>> a + cTraceback (most recent call last):  File "<stdin>", line 1, in <module>TypeError: can only concatenate list (not "str") to list

在python中,相同类型的序列才能相加。

四、序列的乘法
当一个序列乘以数字N时,将得到一个新的序列。
在新的序列中,原来的序列将被重复N次。

>>> test = 'yes'>>> test * 10'yesyesyesyesyesyesyesyesyesyes'#用于生成长度为10的空列表>>> empty = [None] * 10>>> empty[None, None, None, None, None, None, None, None, None, None]

五、成员检测
为了检测一个值是否在序列中,可以使用in运算符。
如果该值存在与序列中,则返回true;否则返回false。

>>> test = 'abc'>>> 'bc' in testTrue

序列使用in运算符时,是以自己的元素为最小匹配单位的:

>>> revenge = [['ironman', '1'], ['captain', '2']]>>> ['ironman', '1'] in revengeTrue>>> 'ironman' in revengeFalse

六、长度、最小值和最大值
内建函数len可以求出序列包含元素的数量:

>>> test = '123'>>> len(test)3

内建函数min和max分别返回序列中最小和最大的元素:

>>> num = [1,3,4,6]>>> min(num)1>>> max(num)6#实际比较的是对应的编码>>> min('sabex')'a'>>> max('!sie2x')'x'