Python3 slice() 函数详解 列表、字符串、元组等的切片对象
slice()
函数的主要作用是获取对象(常用于列表、字符串、元组等)的切片对象,相当于表示range(start, stop, step)生成的索引集,start,stop参数默认为None。使用扩展索引语法时也会生成切片对象。例如:a[start: stop: step]。
它是Python的内置函数,在python文件中直接可以使用。
语法
slice(stop)
slice(start, stop[, step])
参数
stop - 切片的结束值,最终结果的索引值一定小于stop,这取决于step的值。默认情况下(step未设置或者设置为1),最大值等于stop - 1的索引。另外如果slice()函数只设置了一个参数,就当做stop使用,那么就相当于是slice(0, stop)。
start - 切片的开始值,默认为0。
step - 切片的步进值,默认为1。不能将步进值设置0,会报错。如果步进值为复数,则返回反向结果。
返回值
切片对象
实例
§ 实例1 - 函数的用法
#设置一个列表
>>> l = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
#获取前10个参数。索引值10对应的是数字11,而结果是不包含当前值的。所有结果一定小于stop。
>>> s = slice(10)
>>> l[s]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#设置开始和结束索引。
>>> s = slice(5,10)
>>> l[s]
[6, 7, 8, 9, 10]
#设置开始、结束和步进值。
>>> s = slice(0,10,2)
>>> l[s]
[1, 3, 5, 7, 9]
#设置反向获取,还是由于stop不包含当前值的原因。0索引对应的数字1,没有被显示出来。
>>> s = slice(10,0,-1)
>>> l[s]
[11, 10, 9, 8, 7, 6, 5, 4, 3, 2]
#把stop设置为None就没有结束值了,就等于从开始位置一直到数据的最后。正向和方向同理。
>>> s = slice(10,None,-1)
>>> l[s]
[11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
§ 实例2 - 扩展索引语法
索引语法在实际的工作中使用较为广泛,直接替代了slice()函数的使用。它是由引号(:)进行分割来表达start、stop和step。效果与slice()函数一致。 那么在什么时候比较适合使用slice()函数呢? 一般用于在同一个代码块中,有多个切片操作,而如果使用索引语法的话,需要立即对数据进行处理,代码较为分散。而提前先使用slice()声明出多个切片对象,便于管理,例如:快速修改、重载(覆盖)以及复用(多个数据使用相同的切片规则)。
>>> l = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
>>> l[:10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> l[5:10]
[6, 7, 8, 9, 10]
>>> l[0:10:2]
[1, 3, 5, 7, 9]
>>> l[10:0:-1]
[11, 10, 9, 8, 7, 6, 5, 4, 3, 2]
#使用索引语法与slice()函数相比还可以省略掉None的设置,直接留空就是None了。
>>> l[10::-1]
[11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]