zoukankan      html  css  js  c++  java
  • 切片操作

    摘自:https://www.liaoxuefeng.com/wiki/1016959663602400/1017269965565856

    1、切片基本操作

    取前3个元素,用一行代码就可以完成切片:

    >>> L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
    >>> L[0:3]
    ['Michael', 'Sarah', 'Tracy']

    L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引012,正好是3个元素。

    如果第一个索引是0,还可以省略:

    >>> L[:3]
    ['Michael', 'Sarah', 'Tracy']

    也可以从索引1开始,取出2个元素出来:

    >>> L[1:3]
    ['Sarah', 'Tracy']

    2、倒数切片

    类似的,既然Python支持L[-1]取倒数第一个元素,那么它同样支持倒数切片,试试:

    >>> L[-2:]
    ['Bob', 'Jack']
    >>> L[-2:-1]
    ['Bob']

    记住倒数第一个元素的索引是-1

    3、更多操作

    切片操作十分有用。我们先创建一个0-99的数列:

    >>> L = list(range(100))
    >>> L
    [0, 1, 2, 3, ..., 99]

    # 可以通过切片轻松取出某一段数列。比如前10个数:

    >>> L[:10]
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    

    # 后10个数:

    >>> L[-10:]
    [90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
    

    # 前11-20个数:

    >>> L[10:20]
    [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
    

    # 前10个数,每两个取一个:

    >>> L[:10:2]
    [0, 2, 4, 6, 8]
    

    #所有数,每5个取一个:

    >>> L[::5]
    [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
    

    #甚至什么都不写,只写[:]就可以原样复制一个list:

    >>> L[:]
    [0, 1, 2, 3, ..., 99]

    tuple也是一种list,唯一区别是tuple不可变。因此,tuple也可以用切片操作,只是操作的结果仍是tuple:

    >>> (0, 1, 2, 3, 4, 5)[:3]
    (0, 1, 2)

    字符串'xxx'也可以看成是一种list,每个元素就是一个字符。因此,字符串也可以用切片操作,只是操作结果仍是字符串:

    >>> 'ABCDEFG'[:3]
    'ABC'
    >>> 'ABCDEFG'[::2]
    'ACEG'

    在很多编程语言中,针对字符串提供了很多各种截取函数(例如,substring),其实目的就是对字符串切片。Python没有针对字符串的截取函数,只需要切片一个操作就可以完成,非常简单。

    2、多维切片

    https://blog.csdn.net/qq_30835655/article/details/71055198

    2.1、python的多维切片,分为两类:使用了numpy的ndarray类型和python默认的list类型。它们的处理方式是截然不同的!

    ndarray可以通过numpy中的array函数由python中的list转换获得:

    import numpy as np
     
    # 对于ndarray的切片,格式为[x1:x2, y1:y2],截取行数为[x1,x2),列数为[y1,y2)。左边闭空间,右边开空间。
    # 如果要截取某一行,格式为[x,:],截取某一列:[:,y]
    # 其他截取以此类推
     
    list = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
    list_ndarray = np.array(list)
    list_t = list_ndarray[1:3,1:3]
    print(list_t)
     
    # 输出如下
    # [[ 6  7]
    #  [10 11]

    直接对list使用array的多维切片方式会报错,没有直接的支持方式,需要借助for间接实现:

    # 对于list的切片,没有什么技巧,实际上使用的是for循环,对每一行进行切片,这是一种非常native的做法
    # slice = [arr[i][y1:y2] for i in range(x1,x2)]
    # 其他截取以此类推
     
    list = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
    list_t = [list[i][1:3] for i in range(1, 3)]
    print(list_t)
     
    # 输出如下
    # [[6, 7], [10, 11]]

    2.2、tensorflow的多维切片

    t1 = [[1, 2, 3], [4, 5, 6]]  #2*3维
    t2 = [[7, 8, 9], [10, 11, 12]]  #2*3维
    t3 = tf.concat([t1, t2], -1) # 2*6维
    
    print(t3) # Tensor("concat_1:0", shape=(2, 6), dtype=int32)
    
    #二维切片
    print(t3[:, 1]) # Tensor("strided_slice:0", shape=(2,), dtype=int32)
    #一维切片
    print(t3[:1]) # Tensor("strided_slice_1:0", shape=(1, 6), dtype=int32)
  • 相关阅读:
    Docker容器启动时初始化Mysql数据库
    使用Buildpacks高效构建Docker镜像
    Mybatis 强大的结果集映射器resultMap
    Java 集合排序策略接口 Comparator
    Spring MVC 函数式编程进阶
    换一种方式编写 Spring MVC 接口
    【asp.net core 系列】6 实战之 一个项目的完整结构
    【asp.net core 系列】5 布局页和静态资源
    【asp.net core 系列】4. 更高更强的路由
    【Java Spring Cloud 实战之路】- 使用Nacos和网关中心的创建
  • 原文地址:https://www.cnblogs.com/ying-chease/p/13085008.html
Copyright © 2011-2022 走看看