• 精细化python-切片


        我们知道Python的序列对象都是可以用索引号来引用元素的。

        索引号可以是正数由0开始从左向右,也可以是负数由-1开始从右向左。

         在Python中对于具有序列结构的数据来说都可以使用切片操作,需注意的是序列对象某个索引位置返回的是一个元素,而切片操作返回是和被切片对象相同类型对象的副本

    在形式上,切片使用2个冒号分隔的3个数字来完成。
        [start:end:step]

        第一个数字start表示切片开始位置,默认为0;

        第二个数字end表示切片截止(但不包含)位置(默认为列表长度);

        第三个数字step表示切片的步长(默认为1)。

        当start为0时可以省略,当end为列表长度时可以省略,当step为1时可以省略,省略步长时还可以同时省略最后一个冒号。
        当step为负整数时,表示反向切片,这时start应该在end的右侧才行。

    (1)使用切片获取列表部分元素
        使用切片可以返回列表中部分元素组成的新列表。与使用索引作为下标访问列表元素的方法不同,切片操作不会因为下标越界而抛出异常,而是简单地在列表尾部截断或者返回一个空列表,代码具有更强的健壮性。

    (2)使用切片为列表增加元素
        可以使用切片操作在列表任意位置插入新元素,不影响列表对象的内存地址,属于原地操作。
    >>> L1= [3, 5, 7]
    >>> L1[ len(L1) : ]
    []
    >>> L1[ len(L1) : ] = [0]*3       #在列表尾部增加元素
    >>> L1[ :0 ] = [1, 2]               #在列表头部插入多个元素
    >>> L1[3:3] = [4]                 #在列表中间位置插入元素
    >>> L1
    [1, 2, 3, 4, 5, 7, 0,0,0] 

    (3)使用切片替换和修改列表中的元素
    >>> L2 = [3, 5, 7, 9]
    >>> L2[ :3 ] = [1, 2, 3]  #替换列表元素,等号两边的列表长度相等
    >>> L2
    [1, 2, 3, 9]
    >>> L2[ 3: ] = [4, 5, 6]    #切片连续,等号两边的列表长度可以不相等 多余的会追加
    >>> L2
    [1, 2, 3, 4, 5, 6]
    >>> L2[ : : 2 ] = [0]*3    #隔一个修改一个
    >>> L2
    [0, 2, 0, 4, 0, 6]
    >>> L2[ : : 2 ]  =  ['a', 'b', 'c'] #隔一个修改一个
    >>> L2
    ['a', 2, 'b', 4, 'c', 6]

    ***隐性单个位置为插入,

    ***多个位置为修改,多余部分会追加(隔切多余部分不追加,会抛出异常),

    (4)使用切片删除列表中的元素
    >>> L2 = [3, 5, 7, 9]

    >>>L2[3:3] = []  #单个位置为追加,所以不变

     >>> L2[:3] = [] #删除列表中前3个元素

    >>> L2
    [9]

    (5)使用切片函数slice()

    slice() 函数实现切片对象,主要用在切片操作函数里的参数传递。
    slice 语法:
    class slice(stop)
    class slice(start, stop[, step])
    参数说明:

    start -- 起始位置
    stop -- 结束位置
    step -- 间距

    返回一个切片对象。

    >>>myslice = slice(5) # 设置截取5个元素的切片
    >>> myslice
    slice(None, 5, None)
    >>> arr = range(10)
    >>> arr
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> arr[myslice] # 截取 5 个元素
    [0, 1, 2, 3, 4]

    >>>myslice2 = slice(-1:-6:-1) #  设置倒截取5个元素的切片

    >>> arr[myslice2] # 截取 5 个元素

    [9,8,7,6,5,4]

    >>> m2=slice(-6,-12,-1)  #  设置从倒数第6个开始截取6个元素的切片

    >>>arr[ m2 ]   #越界 不会抛出异常

    [4, 3, 2, 1, 0]   

  • 相关阅读:
    vue学习03 v-html
    [spring guides]网关入门
    记一次公司mssql server密码频繁被改的事件
    重构 maixpy 的 board_info + config.json 从而自适应硬件版型。
    介绍 MaixUI 系列(一)如何食用?
    (旧文)在 micropython / esp-at / arduino 中实现 软串口(software-serial) 的参考
    以优化 MaixPy 的启动速度为例,说说 K210 的双核使用及原子操作。
    我是如何在 Win + VSCode 上开发 Keil for GD32 实现 I2C 从机的游戏机手柄。
    为 MaixPy 加入软 SPI 接口(移植 MicroPython 的 SPI)
    为 MaixPy 加入软 I2C 接口(移植 MicroPython 的 I2C)
  • 原文地址:https://www.cnblogs.com/cjtds/p/12668476.html
Copyright © 2020-2023  润新知