Python中的序列
序列(Sequence)是Python中的一种数据结构,这种数据结构根据索引来获取序列中的对象。
Python3中含有三种内建序列类型:list, tuple, string, range。其中range比较特殊,它是一个生成器,其他几个类型具有的一些序列特性对它并不适合,本篇不做详述。
切片操作
切片操作就是对序列按照给定的索引和步长,截取序列中由连续对象组成的片段。
对于序列结构来说,索引和步长都有正负值,分别表示左右两个方向
索引的正方向从左往右取值,起始位置为0,有效范围为 [0, 序列长度-1]
索引的负方向从右往左取值,起始位置为-1,有效范围为 [-序列长度, -1]
因此任意一个序列结构数据的索引范围为-序列长度
到序列长度-1
范围内的连续整数。
用图来表示如下,对于一个字符串’Python’,它的正负索引如下1
2
3字符串 P y t h o n
正索引 0 1 2 3 4 5
负索引 -6 -5 -4 -3 -2 -1
理解了序列索引的特点就能很轻松对字符串进行切片。
切片操作语法
1 | Sequence [start_index: end_index: step] |
*注意:
切片的结果不包含结束索引,即不包含最后的一位,-1代表列表的最后一个位置索引
例子
写得再生动还不如一个例子有用1
2
3
4
5
6#生成一组列表
L = list(range(21))
>>> L
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
>>> len(L)
21
索引范围为:-21~20
切片操作 | 含义 | 结果 |
---|---|---|
L[0] | 取第一个元素 | 0 |
L[:] | 取一个完整的序列,相当于浅拷贝 | |
L[-1] | 取最后一个元素 | 20 |
L[1:5] | 截取从索引为1,到索引为5前面的元素 | [1, 2, 3, 4] |
L[-5:] | 截取后面5个元素 | [16, 17, 18, 19, 20] |
L[:10:2] | 开始到索引为10的元素(但不包括),每隔5个取一个元素 | [0, 5] |
L[::5] | 所有元素,每5个取一个 | [0, 5, 10, 15, 20] |
L[1::5] | 从索引为1的元素开始到结束,隔5个取一个元素 | [1, 6, 11, 16] |
L[::-1] | 将列表倒序 | |
L[::-4] | 倒序列表后按照step的绝对值间隔取元素 | [20, 16, 12, 8, 4, 0] |
L[::-3] | 同上 | [20, 17, 14, 11, 8, 5, 2] |
L[5:0:-1] | step为负数,逆向访问,切片访问到的正值索引范围为[1:5] | [5, 4, 3, 2, 1] |
L[1:6:-1] | step为负数,逆向访问,切片访问到的正值索引范围为[5:1],但其中无元素 | [] |