美文网首页
Python序列负数索引切片的思考

Python序列负数索引切片的思考

作者: 马小李23 | 来源:发表于2018-08-21 21:47 被阅读366次

    Python中的序列是可以采用负数的索引来访问的,其范围是 -1 到序列的负长度,也就是
    -len(sequence) <= index <= -1,负索引以序列的结束为起点。除了提供按照索引,访问序列中的单个元素,Python也提供了切片的方式访问序列中的子序列的方式,这就是切片的访问方式,其一般语法如下:
    sequence[starting_index:ending_index]
    如此,我们会得到从starting_index对应元素开始,到ending_index对应元素结束,但是不包括ending_index对应元素,所组成的子序列的内容。起止索引都是可选的选项,如果没有提供或者为None,那么开始索引默认为0,结束索引默认为序列最末尾的索引。切片的访问模式,有第三个值,类似于步长,其访问类似下面代码

    >>> ('a','b','c','d')[0:3:2]
    ('a', 'c')
    

    在《Python核心编程(第二版)》一书中指出,切片的访问,开始和终止的索引,都可以超过序列的长度,然后给出了如下的代码示例:

    >>> ('Faye', 'Leanna', 'Daylen')[-100:100]
    ('Faye', 'Leanna', 'Daylen')
    

    这样有点难以理解,就是开始的序列是负数,然而访问的得到的序列还是正序的。其实对于这样的访问,首先要排除书中刚刚提到的步长的干扰,重新看切片两个参数情况下的访问说明是:得到从starting_index对应元素开始,到ending_index对应元素结束,但是不包括ending_index对应元素,所组成的子序列的内容。
    那么再回到上述例子中来,-100是不存在的,那么从-100开始自增,最早存在的能访问其对应元素的索引是-3,也就是’Faye’,那么开始的索引就是这个。而从100递减,最早存在的能访问其对应元素的索引是3,就是’Daylen’,于是切片访问两者之间的组成的子序列,就是上述程序的输出。
    如果还是不能明白,可以看几个简单的例子:

    >>> ('a','b','c','d')[-4]
    'a'
    >>> ('a','b','c','d')[-4:4]
    ('a', 'b', 'c', 'd')
    >>> ('a','b','c','d')[-4:0]
    ()
    >>> ('a','b','c','d')[-4:1]
    ('a',)
    >>> ('a','b','c','d')[-4:2]
    ('a', 'b')
    

    相关文章

      网友评论

          本文标题:Python序列负数索引切片的思考

          本文链接:https://www.haomeiwen.com/subject/nzjsiftx.html