一、索引
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 + c
Traceback (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 test
True
序列使用in运算符时,是以自己的元素为最小匹配单位的:
>>> revenge = [['ironman', '1'], ['captain', '2']]
>>> ['ironman', '1'] in revenge
True
>>> 'ironman' in revenge
False
六、长度、最小值和最大值
内建函数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'