序列索引和切片

序列类型都可以使用下标进行索引或切片取值,这是序列类型通用操作。可变序列类型比较特殊,例如列表,可以利用索引或切片进行元素增、删、改,详见 列表的索引和切片

下标从前往后,则以 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], [], [])