• 切片


    利用python解决问题的过程中,经常会遇到从某个对象中抽取部分值的情况。“切片”操作正是专门用于实现这一目标的有力武器。

    理论上,只要条件表达式得当,可以通过单次或多次切片操作实现任意目标值切取。

    通过切片,可以对内置的list、str、bytes、tuple等进行切割,切割操作还可以延伸到实现了__getitem__和__setitem__这两个特殊方法的python类上。

    完整的切片表达式:

    someObject[start_index : end_index : step]
    

       1)start_index:表示起始索引(包含该索引对应值)。该参数省略时,表示从对象“端点”开始取值,至于是从“起点”还是从“终点”开始,则由step参数的正负决定。

          step为正从“起点”开始,为负从“终点”开始。故缺省时:

          a. step > 0:start_index = 0

          b. step < 0:start_index = -1

       2)end_index:表示终止索引(不包含该索引对应值)。该参数省略时,表示一直取到数据“端点”(当然也取到了该点),至于是到“起点”还是到“终点”,同样由step参

          数的正负决定。step为正时直到“终点”,为负时直到“起点”。故缺省时:

          a. step > 0:end_index = len(someObject)

          b. step < 0:end_index的值就无法表示了,应该是索引0的再前一个位置。

       3)step:正负数均可,其绝对值大小决定了切取数据时的“步长”,而正负号决定了“切取方向”,正表示“从左往右”取值,负表示“从右往左”取值。

          当step省略时,默认为1,即从左往右以步长1取值。

       注意:index为正时,表示从左往右数,起始值0为正着数的第一个元素;

             index为负时,表示从右往左数,起始值-1为逆着数的第一个元素(即最后一个元素)。

             只有index缺省的时候才看step的正负来判断是起点还是终点。

     
    下面以list为例进行讲述:
     a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    

    1. 存在2个 : 的情况

       这种情况是完整的形式,如果缺省了某个值,就按默认来处理,判断步骤如下:

       a. 确定start_index:正则正着数,负着逆着数,缺省则由step的正负来判断是起点还是终点。

       b. 确定end_index:正则正着数,负着逆着数,缺省则由step的正负来判断是起点还是终点。

       c. 由step的正负来确定切割方向,数值来确定切割步长。

    >>> a[::]       # [0,10), 正向
    >>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    >>> a[::-1]     # [9,0-1), 反向
    >>> [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
    
    >>> a[1:6:-1]   # [1,6), 反向
    >>> []
    
    >>> a[:6:-1]    # [9,6), 反向
    >>> [9, 8, 7]
    
    >>> a[6::-1]    # [6,0-1), 反向
    >>> [6, 5, 4, 3, 2, 1, 0]
    
    >>> a[-1:-6:-1] # [-1,-6), 反向
    >>> [9, 8, 7, 6, 5]
    
    >>> a[-6::-1]   # [-6,0-1), 反向
    >>> [4, 3, 2, 1, 0]
    
    >>> a[1:-6:-1]  # [1,5), 反向
    >>> []
    
    >>> a[-1:6:-1]  # [9,6), 反向
    >>> [9, 8, 7]
    

       注:当start_index表示的实际位置在end_index的左边时,表示从左往右取值,此时step必须是正数(同样表示从左往右);

           当start_index表示的实际位置在end_index的右边时,表示从右往左取值,此时step必须是负数(同样表示从右往左);

           即两者的取值顺序必须相同。否则都返回空。

    2. 存在1个 :的情况,形式如下:

    someObject[start_index : end_index]

       step默认为1,正向。如果start_index和end_index也缺省,即形如 someObject[:],someObject[start_index:],someObject[:end_index],

       start_index = 0,end_index = len(someObject)。

       当然,不存在以下两种形式:

    someObject[start_index : step]
    someObject[end_index : step]

    3. 没有 :的情况,表示切取单个元素

    >>> a[0]
    >>> 0
    >>> a[-4]
    >>> 6
    

    切片可以被命名

       slice() 函数实现切片对象,主要用在切片操作函数里的参数传递。函数原型如下:

    class slice(start, stop[, step])

      下面举个例子:

    items = [0, 1, 2, 3, 4, 5, 6]
    a = slice(2, 4)
    print(a.start)      # 2
    print(a.stop)       # 4
    print(items[2:4])   # [2, 3]
    print(items[a])     # [2, 3]
    

      

      

  • 相关阅读:
    Servlet开发
    HTML实现页面自动跳转的五种方法
    AVAYA话机管理
    AVAYA路由
    报关相关知识
    基本杆法
    AVAYA初始配置
    加塞和瞄准
    基本杆法图解
    AVAYA拨号计划
  • 原文地址:https://www.cnblogs.com/yanghh/p/13150503.html
Copyright © 2020-2023  润新知