之前对于切片的不理解,再次看书有的一些理解,于是记下来以便日后查看.
#这里有一个列表
>>> a = range(10)
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
合法的切片语句形如[a : b]或者形如[a : b : c]都满足一个条件,就是a <= x < b.
其中前者的步长默认为1, 后者的步长为c, 肯能是正的也可能是负的,但是不可以为0.
更好的理解是for(int i = a ; x < b ; x += c )或者for(int i = a ; x > b ; x += c )
有一种特殊情况不能这样解释.上面讲述都是从左往右或者从右往左一个方向去元素,但下面这个例子是从左右两个方向取元素.从左往右以下标0开始,从右往左以下标-1开始.但是依然是一个半闭区间
EG:
#就是从左右两边同时取
>>> a[3:-3]
[3, 4, 5, 6]
下面几种变形:
>>> a[0::4]#for(int i = 0 ; x < 10 ; x += 4 )
[0, 4, 8]
>>> a[8:3:-2]#for(int i = 6 ; x > 3 ; x += -2 )
[8, 6, 4]
>>> a[:5:-2]#for(int i = 10 ; x > 5 ; x += -2 )
[9, 7]
>>> a[5::-2]#for(int i = 5 ; x > -1 ; x += -2 )可以这样理解,但是不能写成a[5:-1:-2]
[5, 3, 1]
如何判断一个为空的表达式呢?有个方法.
x[a]比x[b]后出现在原序列中.
EG:
>>>x[5 : 1]
x[5]比x[1]后出现在原序列中.