python中的slice对象

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的作用,返回元组形式的标准化的切片。

posted @ 2020-05-04 23:05  gujianmu  阅读(1860)  评论(0编辑  收藏  举报