python中的切片操作

作者 likaiqiang 日期 2019-03-30
python中的切片操作

什么是切片

切片,顾名思义,就是从列表、字符串、元组中按照一定的规则取出你想要的部分。

切片操作的参数和原理

切片操作的参数即切片的规则。总共三个参数:起始位置、结束位置、步长。

需要注意的是,起始位置不一定小于结束位置。起始位置与结束位置的大小关系取决于步长的正负。步长为正,起始位置小于结束位置;步长为负,起始位置大于结束位置。而且pyhton的切片操作是顾头不顾尾的。

举个例子

ls = [1,2,3,4,5]
print(ls[1:4:1]) # [2,3,4]
print(ls[4:1:-1]) # [5,4,3]

ls[1:4:1] 的意思是 从ls下标为1的位置开始(包括)到ls下标为4的位置结束(不包括)往右截取步长为1的切片。 其结果为[2,3,4]

ls[4:1:-1] 的意思是 从ls下标为4的位置开始(包括)到ls下标为1的位置结束(不包括)往左截取步长为1的切片。 其结果为[5,4,3]

你可能会疑惑,python并没有规定开始位置与结束位置的大小关系,假如有这样一个例子:

ls = [1,2,3,4,5]
print(ls[2:0:1]) # []

ls[1:0:1]的意思是 从ls下标为2的位置开始到ls下标为0的位置结束往右截取步长为1的切片。其结果为空列表,这是一个没有意义的切片,那假如我们把步长1换成-1:

ls = [1,2,3,4,5]
print(ls[2:0:-1]) # [3,2]

其结果是[3,2]。所以为了避免出现没意义的切片,我们传的三个参数在逻辑上必须有意义。

step可以省略,默认为1。开始位置与结束位置也可以省略,省略后表示从一端到另外一端,至于从哪端到哪端,取决于其他的参数。

ls = [1,2,3,4,5]
print(ls[::1]) # [1,2,3,4,5] 往右截取步长为1的切片
print(ls[::-1]) # [5,4,3,2,1] 往左截取步长为1的切片
print(ls[0::1]) # [1,2,3,4,5] 往右截取步长为1的切片
print(ls[0::-1]) # [1]

前三个好理解,最后一个比较绕。表示从ls下标为0的位置开始(包括)到ls的结束位置,往左截取步长为1的切片。其结果只匹配出[1]。