python中的slice对象
slice是python的内建类型,主要用于构建灵活的切片,或者通过__getitem__实现更好的自建类型。
以一维切片为例,seq[]里面既可以传整数,也可以传slice对象,即
seq = ‘abcdef‘
seq[1]
seq[1:3]
s = slice(1, 3)
seq[s]
多维对象支持整数和slice对象的组合,实际内部__getitem__得到的是一个元组,里面的元素要么是整数,要么是slice对象。
seq[start:stop:end]其效果就是seq._getitem_ (slice(start, stop, end))。
以下是一个从fluent python中摘出的例子:
>>> class Myseq:
def __getitem__(self, index):
return index
>>> s = Myseq()
>>> s[1]
1
>>> s[1:4]
slice(1, 4, None)
>>> s[1:4:2]
slice(1, 4, 2)
>>> s[1:4:2, 9]
(slice(1, 4, 2), 9)
>>> s[1:4:2, 7:9]
(slice(1, 4, 2), slice(7, 9, None))
dir(slice)得到其中比较有用的属性有start, stop, end和方法indices。
start, stop, end非常好理解就是切片的开端、末端和步长。
indices是一个可以启发slice对象如何作用切片的方法,其调用形式如下:
S.indices(len) -> (start, stop, stride)
下面继续用fluent python中的例子:
>>> slice(None, 10, 2).indices(5)
(0, 5, 2)
>>> slice(-3, None, None).indices(5)
(2, 5, 1)
假设有一序列seq = ‘ABCDE‘, len(seq) = 5
‘ABCDE‘[:10:2]等价于‘ABCDE‘[0:5:2]
‘ABCDE‘[::-3]等价于‘ABCDE‘[2:5:1]
从上面就可以看出indices的作用,返回元组形式的标准化的切片。
原文:https://www.cnblogs.com/gujianmu/p/12828750.html