Python切片操作

切片是Python语言的特性之一。无论是字符串还是数组都可以使用切片操作快速高效的获得目标值。使用起来也比较简单:

object[ start_index : end_index : step ]

start_index是起始索引,可正可负可省略,取值时包含该索引的值

end_index是终止索引,可正可负可省略,取值时不包含该索引的值

step是取值步长,可正可负可省略,正数时表示从左向右取值,负数时表示从右向左取值,省略时表示+1

越简单的东西越容易忽略,也就越容易犯错误,对,说的就是我!下面结合下方的例子,看一下几个切片操作。

1
num_list = [i for i range(10)]

则这10个数的索引情况为:

0 1 2 3 4 5 6 7 8 9
正索引 0 1 2 3 4 5 6 7 8 9
负索引 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1

在写切片或者分析切片的时候,按照以下流程分析:

  1. 先看step正负决定方向,再看step数字决定步长

  2. 锁定start_index,正数走正索引,负数走负索引

  3. 锁定end_index,正数走正索引,负数走负索引;同时从start_index出发,沿步骤1中的方向能否走到end_index。若能,执行切片操作;若不能,返回空。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
num_list[1:-6:1]
# 向右走,初始值[1]:1,终止值[-6]:4,可完成切片操作
# 若step=-1,则无法完成切片操作

num_list[1:-10:-1]
# 向左走,初始值[1]:1,终止值[-10]:0,可完成切片操作
# 向右走,则无法完成切片操作

num_list[:-5:-1]
# 向左走,初始值省略,直接定位到右边
# 在最右边后,是按照正索引走呢?还是按照负索引走?(即:初始值是下标[9]还是下标[-1]?)
# 记住:和step保持正负一致!
# 答案:[-1]到[-5],向左走,可完成切片操作

num_list[:-5:1]
# 按照上例的分析,分析一下?
# 答案:[0]到[-5],向右走,没问题

再复杂的切片我也不怕了!(插个腰)