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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM