Python的切片是特别经常使用的功能,主要用于对列表的元素取值。使用切片也会让你的代码显得特别Pythonic。bash
切片的主要声明以下,假设如今有一个list,命名为alist:spa
alist = [0,1,2,3,4]
复制代码
切片语法的基本形式为:code
alist[start:stop:step]
复制代码
能够看出对于列表的切片操做有三个参数,分别为:数学
三个参数都是可选参数,意义为list的下标,即index。step参数默认值为1。表现形式有如下几种:class
alist[start:stop]
alist[start:]
alist[:stop]
alist[:]
复制代码
a[1:3]
的结果为[1,2]
。a[1:]
会获得[1,2,3,4]
。a[:4]
会获得结果[0,1,2,3]
须要注意的是,:stop
表示不在选定切片中的第一个值,alist[start:stop]
的取值相似于数学中的取值范围为[start, stop)
, 因此在步长默认为1的状况下,start-stop
的结果即为所取元素的数量。基础
start与stop的值能够是负值,表示取值是从list的最后开始,而不是开头。 例如:原理
alist[-1]
alist[-3:]
alist[:-1]
复制代码
[2,3,4]
。[0,1,2,3]
。step为负值时候表示将列表逆向,最简单的例子以下:语法
alist[::-1]
复制代码
输出结果为[4,3,2,1,0]
。这个例子实际是如下面的这个形式返回,总结
[alist[-1], alist[-1-step], ..., alist[0]]
复制代码
即从倒数第一个元素开始,每一步加上步长,由于这里步长为负数,因此是减法,直到alist的开头。 知道这个原理,就能明白一些加上了start与stop参数的复杂写法,例如:命名
alist[1::-1]
复制代码
其实是这样返回:
[alist[1], alist[1-step], ..., alist[0]]
复制代码
所以,返回的是[1,0]
alist[:1:-1]
复制代码
其实是这样返回:
[alist[-1], alist[-1-step], ..., alist[stop+1]]
复制代码
所以,返回的是[4, 3, 2]
。
注意,因为是逆序,因此start参数应该大于stop参数。
alist[3:1:-1]
复制代码
其实是这样返回:
[alist[start], alist[start-step], ..., alist[stop+1]]
复制代码
所以,返回的是[3,2]
咱们能够看出,
切片语法的使用特别灵活,若是正确掌握了它的用法,可以简化你的代码。须要注意的是,Python也提供了slice类用于制造切片,例如:
alist[start:stop:step]
复制代码
实际上等价于
alist[(slice(start,stop,step))]
复制代码