序列索引和切片
序列类型都可以使用下标进行索引或切片取值,这是序列类型通用操作。可变序列类型比较特殊,例如列表,可以利用索引或切片进行元素增、删、改,详见 列表的索引和切片。
下标从前往后,则以 0 开始,从后往前,则从 -1 开始,双向索引:
('a', 'b', 'c', 'd')
0 1 2 3
-4 -3 -2 -1
下标索引,直接取出对应索引下的值,超出范围则报错:
a = [1,2,3,4]
a[10]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-18-5680bb375980> in <module>
1 a = [1,2,3,4]
----> 2 a[10]
IndexError: list index out of range
a = [1,2,3,4]
a[0], a[-2]
(1, 3)
下标切片取值规则:[起始:结束:步长],不包含结束。
- 没有指定起始,则默认为 0;
- 没有指定结束则默认到最后一个元素结束;
- 下标可以双向混合使用;
- 没有指定步长,则默认为 1;
- 步长为负数,则反向取值,-1 开始。
a = [1,2,3,4,5,6,7]
a[:3]
[1, 2, 3]
a = [1,2,3,4,5,6,7]
a[3:]
[4, 5, 6, 7]
a = [1,2,3,4,5,6,7]
a[1:-3], a[-6:4]
([2, 3, 4], [2, 3, 4])
a = [1,2,3,4,5,6,7]
a[::2]
[1, 3, 5, 7]
a = [1,2,3,4,5,6,7]
a[::-2] # 默认 -1 开始取
[7, 5, 3, 1]
a = [1,2,3,4,5,6,7]
a[0:7:-2]
[]
a = [1,2,3,4,5,6,7]
a[-1:0:-2]
[7, 5, 3]
切片范围可以无限大,范围内没有元素,则得到空的容器:
a = [1,2,3,4,5,6,7]
a[5:100], a[1:1], a[5:-10]
([6, 7], [], [])