IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 流畅的Python读书笔记(三)序列:切片应用及原理浅析 -> 正文阅读

[Python知识库]流畅的Python读书笔记(三)序列:切片应用及原理浅析

活动地址:CSDN21天学习挑战赛

流畅的Python读书笔记(三)序列:切片应用及原理浅析


本篇笔记简略介绍切片的使用,同时会简单说明,切片操作时,Python解释器会进行哪些调用。

假定你对切片有了一定的了解。

切片的使用

切片较重要的作用有两个:提取感兴趣的数据;透过切片修改原序列

  • 提取感兴趣的数据

    • 先简单提一下切片语法。

      语法:对于一个序列x。可以使用x[a:b:c]的方式对其进行切片。a表示切片起始索引,b表示切片结束索引,c表示切片步长。

      切片操作的范围有一个口诀,左闭右开,就是说,切片范围为[a,b),能够取到下标为a的元素,取不到下标为b的元素。而切片步长是指从起始下标a开始,每次加上c后,取下一个元素。c可以省略,当省略时,c的值默认为1。当c为正数时,若a省略,则a默认为序列起始,即a=0,若b省略,则b默认为序列结尾,即b=len(x);当c为负数时,若a省略,则a默认为序列末尾,即a=-1,若b省略,则b默认为序列开始,即b= —(len(x) + 1)

      示例:

      >>> l = list(range(10))
      >>> l
      [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
      >>> l[2:5]
      [2, 3, 4]
      >>> l[:]
      [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
      >>> l[-1:-(len(l) + 1):-1]
      [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
      
  • 透过切片修改原序列

    • 如果把切片放在赋值语句的左边,或把它作为del操作的对象,我们就可以对序列进行嫁接、切除或就地修改操作。

      >>> l = list(range(10))
      >>> l
      [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
      >>> l[2:5] = [20, 30]
      >>> l
      [0, 1, 20, 30, 5, 6, 7, 8, 9]
      >>> del l[5:7]
      >>> l
      [0, 1, 20, 30, 5, 8, 9]
      >>> l[3::2] = [11, 22]
      >>> l
      [0, 1, 20, 11, 5, 22, 9]
      >>> l[2:5] = 100  ①
      Traceback (most recent call last):
        File "<stdin>", line 1, in <module>TypeError: can only assign an iterable >>> l[2:5] = [100]
      >>> l
      [0, 1, 100, 22, 9]
      

      ①如果赋值的对象是一个切片,那么赋值语句的右侧必须是个可迭代对象。即便只有单独一个值,也要把它转换成可迭代的序列。


前面提到了切片的范围是左闭右开,即[a,b)。下面简单说一下为什么是这样。

为什么切片和区间会忽略最后一个元素

  • 当只有最后一个位置信息时,可以很快推断出切片和区间中有几个元素。比如切片x[:4],我们可以通过4直接判断出,切片中有4个元素。

  • 起始位置和终止位置都已知时,推断切片和区间中有几个元素。比如切片x[a:b],我们可以直接推断出,切片中有b-a个元素。

  • 便于分隔序列。比如序列x,向将其中的数据从中间某个元素处分隔开,那么找到分隔点的下标索引mid,然后切片x[:mid],x[mid:]

Python解释器对[]的处理

假定现有一个序列,这里具体一点,就是一个列表seq。对其进行切片seq[start:stop:step], 在前面这个表达式求值时,Python解释器会调用seq.__getitem__(slice(start, stop, step))

上面slice(start, stop, step)会返回一个slice对象。

  • 优化切片代码

    先说明会用到的文件animals.txt,其中的内容如下:

    name____spe__age
    Tom    Cat   1
    Jerry  Mouse 1
    
    • 之前,我们对序列切片都是在[]中直接指定切片范围。比如:
    infos = open('animals.txt', 'r')
    # 提取动物名称
    for info in infos:
        print(info[0:5])
    
    #输出结果为:
    #name_
    #Tom
    #Jerry
    
    • 如何实现优化?通过slice对象进行切片,进而使代码可读性增强。
    infos = open('animals.txt', 'r')
    animal_name = slice(0, 5)  #这是最重要的优化,提高了代码可读性
    print(animal_name)
    print(type(animal_name))
    # 提取动物名称
    for info in infos:
        print(info[animal_name])
    
    #输出结果为:
    #slice(0, 5, None)
    #<class 'slice'>
    #name_
    #Tom  
    #Jerry
    

参考资料

  • 流畅的Python
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-08-19 19:00:11  更:2022-08-19 19:01:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 9:31:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码