• 详解Python中的切片(一看就懂版)


    前言

    在我们使用Python的时候,经常会听到“切片”这个词!那什么是切片呢?切片是对序列数据(列表、元组、字符串),根据下标索引,对一定范围内数据的获取。
    简单来说就是,通过下标索引获取一定范围内的元素。

    基本索引

    什么叫基本索引呢?
    在Python中,对序列数据(列表、元组、字符串等),使用单个整数获取数据的方式,叫基本索引。
    例如:

    # coding:utf-8
    
    a = []
    for i in range(10):
        a.append(i)
    
    print(a)
    # 基本索引
    print("第0个元素为", a[0])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述
    Python中有语法糖:可以使用负数进行索引。
    例如:

    # coding:utf-8
    
    a = []
    for i in range(10):
        a.append(i)
    
    print(a)
    # 基本索引
    print("第0个元素为", a[0])
    # 使用负数索引
    print("第-2个元素为", a[-2])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述
    下面,我们用一张表展示a的索引范围。非负下标索引和负数下标索引共同构成了Python索引的有效范围。
    在这里插入图片描述
    在基本索引中,索引超出有效范围时会报IndexError!!!

    # coding:utf-8
    
    a = []
    for i in range(10):
        a.append(i)
    
    print(a)
    # 基本索引
    print("第0个元素为", a[0])
    # 使用负数索引
    print("第-2个元素为", a[-2])
    # 索引超出有效索引范围
    print(a[100])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述

    基本切片

    基本语法:
    a[start : end],使用该语法之后,会获得a列表中左闭右开的一系列元素。当start和end为负数时,当作是负数索引进行切片即可。

    # coding:utf-8
    
    a = []
    for i in range(10):
        a.append(i)
    
    print(a)
    # 基本索引
    print("第0个元素为", a[0])
    # 使用负数索引
    print("第-2个元素为", a[-2])
    # 索引超出有效索引范围
    # print(a[100])
    # 基本切片
    print(a[2:8])
    print(a[-5:-2])
    print(a[2:-1])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    在这里插入图片描述

    超出有效范围

    使用基本索引的话,超出有效范围,就会报错。
    而在切片中,如果超出有效范围是不会报错的。但是会进行截断,就是仍然按范围进行左闭右开的获取,但是超出序列数据范围的部分,全部假想成空值,最终对获取到的空值进行忽略即可。
    例如:

    # coding:utf-8
    
    a = []
    for i in range(10):
        a.append(i)
    
    print(a)
    # 基本索引
    print("第0个元素为", a[0])
    # 使用负数索引
    print("第-2个元素为", a[-2])
    # 索引超出有效索引范围
    # print(a[100])
    # 基本切片
    print(a[2:8])
    print(a[-5:-2])
    print(a[2:-1])
    
    # 超出有效范围
    print("-" * 50)
    print(a[-100:100])
    print(a[3:55])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    在这里插入图片描述

    start在end的右边

    当索引start在end的右边时,会发生什么呢?
    不会报错。因为切不出元素,所以会返回一个空序列。

    # coding:utf-8
    
    a = []
    for i in range(10):
        a.append(i)
    
    print(a)
    # 基本索引
    print("第0个元素为", a[0])
    # 使用负数索引
    print("第-2个元素为", a[-2])
    # 索引超出有效索引范围
    # print(a[100])
    # 基本切片
    print(a[2:8])
    print(a[-5:-2])
    print(a[2:-1])
    
    # 超出有效范围
    print("-" * 50)
    print(a[-100:100])
    print(a[3:55])
    
    # 当start在end的右边
    print("-" * 50)
    print(a[8:2])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    在这里插入图片描述

    start或end为缺省时

    start和end是可以为缺省的,当start和end为缺省时,Python是尽可能取最大区间的。
    例如:

    # coding:utf-8
    
    a = []
    for i in range(10):
        a.append(i)
    
    print(a)
    # 基本索引
    print("第0个元素为", a[0])
    # 使用负数索引
    print("第-2个元素为", a[-2])
    # 索引超出有效索引范围
    # print(a[100])
    # 基本切片
    print(a[2:8])
    print(a[-5:-2])
    print(a[2:-1])
    
    # 超出有效范围
    print("-" * 50)
    print(a[-100:100])
    print(a[3:55])
    
    # 当start在end的右边
    print("-" * 50)
    print(a[8:2])
    
    # 缺省
    print("-" * 50)
    print(a[:5])
    print(a[2:])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    在这里插入图片描述

    可以调整步长的切片

    语法是:a[start : end :step],表示从start开始,每step取一个值,直到跨越了end(不包含end),step可正可负,不为0.
    其实咋们平时用的基本切片就是step为1的切片!

    step为正

    # coding:utf-8
    
    a = []
    for i in range(10):
        a.append(i)
    
    print(a)
    # 基本索引
    print("第0个元素为", a[0])
    # 使用负数索引
    print("第-2个元素为", a[-2])
    # 索引超出有效索引范围
    # print(a[100])
    # 基本切片
    print(a[2:8])
    print(a[-5:-2])
    print(a[2:-1])
    
    # 超出有效范围
    print("-" * 50)
    print(a[-100:100])
    print(a[3:55])
    
    # 当start在end的右边
    print("-" * 50)
    print(a[8:2])
    
    # 缺省
    print("-" * 50)
    print(a[:5])
    print(a[2:])
    
    # 带有步长的切片
    # 步长为正
    print("*" * 50)
    print(a[0:7:2])
    print(a[::2])
    print(a[:-3:2])
    print(a[-100:-4:3])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    在这里插入图片描述

    step为负

    当step为负时,会进行逆序切片。因为当缺省时,python尽可能使获取到的区间尽可能大,那么缺省时,start会趋近无穷大,end会趋近无穷小。

    # coding:utf-8
    
    a = []
    for i in range(10):
        a.append(i)
    
    print(a)
    # 基本索引
    print("第0个元素为", a[0])
    # 使用负数索引
    print("第-2个元素为", a[-2])
    # 索引超出有效索引范围
    # print(a[100])
    # 基本切片
    print(a[2:8])
    print(a[-5:-2])
    print(a[2:-1])
    
    # 超出有效范围
    print("-" * 50)
    print(a[-100:100])
    print(a[3:55])
    
    # 当start在end的右边
    print("-" * 50)
    print(a[8:2])
    
    # 缺省
    print("-" * 50)
    print(a[:5])
    print(a[2:])
    
    # 带有步长的切片
    # 步长为正
    print("*" * 50)
    print(a[0:7:2])
    print(a[::2])
    print(a[:-3:2])
    print(a[-100:-4:3])
    
    
    # 步长为负时
    print("@" * 50)
    print(a[::-1])
    # 为了保证取到的区间尽可能大,所以end趋向无穷小,所以会切到索引0
    print(a[6::-1])
    # 因为逆序切,为了保证取到的区间尽可能大,所以start会趋向于无穷大,一直切到索引4(不包含4)
    print(a[:4:-2])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    在这里插入图片描述

    完结,撒花撒花…

  • 相关阅读:
    [附源码]Python计算机毕业设计白果园网上水果超市
    coreldraw2018零售版最新下载步骤
    DevEco Hvigor高效编译,构建过程新秘籍
    什么是app测试,什么是web测试,app测试和web测试有什么区别
    执行日志(3)查看JOIN算子执行
    java毕业设计点餐系统的设计与实现mybatis+源码+调试部署+系统+数据库+lw
    三层交换、VLAN总结
    Python类变量和实例变量(类属性和实例属性)
    自动增加 Android App 的版本号
    【C语言】三子棋
  • 原文地址:https://blog.csdn.net/Elon15/article/details/127348178