slice是python内置的切片对象
用法一:作为切片和列表等配合使用
a = slice(3) #只规定了终止位
s = [1, 2, 3, 4, 5]
s[a]
#[1, 2, 3]
a = slice(1, 3)
s[a] #规定了起始位和终止位
#[2, 3]
a = slice(1, 4, 2)
s[a]
#[2, 4]
用法二:配合indices使用
indices只能接受整型参数
查阅资料后,官方表述是:indices中的参数规定了“被切片对象”的长度
这里的长度指,被切片对象原来有5个元素,长5,但是这个indices的输入参数是3,那么最后只考虑前3个元素。如果indices的输入参数是6,由于被切片对象没那么多元素,因此最后只考虑5个元素。
说起来很拗口,简单说,原来的列表长度可能很长,但是indices规定,我只考虑前面这么多,后面就不考虑了。如果indices长度超过了原来的列表长度,超过的就不再考虑。
说白了就是规定了切片对象的终止值。
以上讨论的仅是indices输入参数的含义:规定终止值。
slice.indices(self, integer)返回的是一个元组,元组中三个元素分别代表了初始值、终止值、步长
类似的还有
也就是说,indices只是slice类的一个属性!!!!!!!!!!!!!
有什么用呢?
众所周知,range使用时也需要规定初始值、终止值、步长。因此常用在for循环里。
上图等同于:
注意,必须要加*,因为a.indices是一个元组对象。
为什么大费周章这样做?
直接把变量传进去不就行了。
这样显然是可以的,使用3个变量可以规定一个for循环的初始、终止、步长。
但如果利用slice类型,只需要占用一个输入位,规定3个变量,可以让程序接口更加简洁!