python的间隔切片技巧

2020年5月16日 / 7次阅读 / Last Modified 2020年5月16日

python的切片(slice)技术是相当纯熟好用的,sequence(序列)对象都可以直接切片,list,字符串,tuple,bytes...

切片的基本操作,就是讲sequence对象的一部分切下来:

>>> a
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> s
'123456789'
>>> t
(1, 2, 3, 4, 5, 6, 7, 8, 9)
>>> a[2:7]
[3, 4, 5, 6, 7]
>>> s[2:7]
'34567'
>>> t[2:7]
(3, 4, 5, 6, 7)

从index=2开始,到index=7,但是不去index=7这个位置!7-2=切下来的长度!

我尝试了一下,似乎切片操作只能从左向右切,不能反过来:

>>> a[-2:-7]
[]
>>> a[-2:7]
[]
>>> a[-2:]
[8, 9]
>>> a[-2:9]
[8, 9]

间隔切片开始了,下面是每两个元素取一个:

>>> a[::2]
[1, 3, 5, 7, 9]
>>> s[::2]
'13579'
>>> t[::2]
(1, 3, 5, 7, 9)
>>>
>>> a[3::2]
[4, 6, 8]
>>> s[3::2]
'468'
>>> t[3::2]
(4, 6, 8)
>>>
>>> a[3:7:2]
[4, 6]
>>> s[3:7:2]
'46'
>>> t[3:7:2]
(4, 6)

最后那个数字2,表示步长,即每走2步干一票。当然可以自己修改这个数字了。用步长可以从右到做,即反过来走。

>>> a[::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1]
>>> s[::-1]
'987654321'
>>> t[::-1]
(9, 8, 7, 6, 5, 4, 3, 2, 1)
>>>
>>> a[::-2]
[9, 7, 5, 3, 1]
>>> s[::-2]
'97531'
>>> t[::-2]
(9, 7, 5, 3, 1)
>>>
>>> a[3::-2]
[4, 2]
>>> s[3::-2]
'42'
>>> t[3::-2]
(4, 2)

现在可以反过来,从右到左切片了:

>>> a[100:2:-1]
[9, 8, 7, 6, 5, 4]
>>> s[100:2:-1]
'987654'
>>> t[100:2:-1]
(9, 8, 7, 6, 5, 4)

注意index=100,是合法的,只要index比最大的大,都是取最后的那个元素!

关键是切片操作的步长,这个参数的要义一定要get到。

-- EOF --

本文链接:https://www.pynote.net/archives/1944

相关文章

    留言区

    《python的间隔切片技巧》有2条留言

    电子邮件地址不会被公开。 必填项已用*标注

    • 麦新杰

      切片操作不会出现index out of range的错误,最多的就是切出来一个空的对象! [回复]

    • 麦新杰

      切片的步长默认是1,整数就从左向右,负数就从右向左,如果与启止index冲突,就返回空。 [回复]


    前一篇:
    后一篇:

    More


    ©Copyright 麦新杰 Since 2019 Python笔记

    go to top