【python进阶】序列切片还能这么用?切片的强大比你了解的多太多

📚引言
🙋♂️作者简介:生鱼同学,大数据科学与技术专业硕士在读👨🎓,曾获得华为杯数学建模国家二等奖🏆,MathorCup 数学建模竞赛国家二等奖🏅,亚太数学建模国家二等奖🏅。
✍️研究方向:复杂网络科学
🏆兴趣方向:利用python进行数据分析与机器学习,数学建模竞赛经验交流,网络爬虫等。
在我们学习python的过程中,非常重要的一个技巧就是对序列进行切片。常见的例如列表,元组等数据结构都支持切片的功能。但是,切片还有一些高级的用法很少有人用到,下面就带大家一起来看看切片的高级用法。
📖切片的基础用法
想要深层次的了解切片的高级用法,我们首先要从切片的基础用法说起。切片能够帮助我们取出一个范围对应的元素,切片操作的基本表达式为:
序列[序列开始的索引:序列结束索引:步长]
看下面这个例子:
example_list = [i for i in range(10)]
# 从头取到尾
print(example_list[:])
# 从开始到序列为5的索引(取一部分)
print(example_list[:5])
# 取中间的一部分数据
print(example_list[2:5])
# 取中间的一部分数据,步长为2
print(example_list[2:8:2])>>>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>[0, 1, 2, 3, 4]
>>>[2, 3, 4]
>>>[2, 4, 6]
了解python的朋友们都知道,切片默认是左闭右开的区间,即在数学上的表示为[开始的索引,结束的索引)[开始的索引,结束的索引)[开始的索引,结束的索引)。但是很少有人探讨过,为什么切片会有这个特性,下面我们就来讨论,为什么切片会忽略最后一个元素。
📑为什么切片是左闭右开的区间
其实使用左闭右开的规则有很多的好处,主要有以下几个:
- 当我们使用省略了开始索引的切片时,我们可以快速的知道该切片有几个元素。
example_list_02 = [i for i in range(10)]
# 我们快速的知道,该切片有5个元素
example_list_02[:5]>>> [0, 1, 2, 3, 4]
- 当我们知道开始的索引和结束的索引的时候,我们可以通过截止索引和开始索引做减法快速得到切片的元素个数。
example_list_03 = [i for i in range(10)]
# 我们快速的知道,该切片有3个元素
example_list_02[2:5]>>> [2, 3, 4]
- 我们可以利用一个下标X,把一个序列分割成不会重叠的两个部分。
# 当我们想要快速的将一个数组分割成两份时,可以只使用一个下标
example_list_03 = [i for i in range(10)]
print(example_list_03[:5])
print(example_list_03[5:])>>>[0, 1, 2, 3, 4]
>>>[5, 6, 7, 8, 9]
📖构建切片对象处理数据
切片对象slice是python的一个内置函数,我们可以利用slice创建切片对象,从而将其用到任何可以被切片的序列中。slice的创建形式如下:
slice(起始索引, 终止索引, 步长)
为了更好的理解上述切片对象的用法,我们看下面这个例子:
# 生成器表达式创建元组
example_tuple = tuple(i for i in range(10))
print(example_tuple)
# 创建切片对象
slice_item = slice(5,7)
# 使用切片对象进行切片
print(example_tuple[slice_item])>>>(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
>>>(5, 6)
在本例子中,我么创建了一个元组作为示例。然后我们创建了一个切片的对象,从而用它来代替切片时输入的索引,做到一次定义,多次使用。我们接着看另一个实用的例子:
student_information="""
---name--- ---age--- ---sex---
tom 18 male
jack 20 male
jane 16 female
"""# 创建不同含义的切片对象
NAME = slice(0,7)
AGE = slice(7,13)
SEX = slice(13,None)# 处理数据并利用切片对象进行处理
line_items = student_information.split('\n')
for line in line_items[2:]:print(line[NAME],line[SEX])>>>tom male
>>>jack male
>>>jane female
在上述例子中,我们处理了一个字符类型的学生信息表。定义了三个不同的切片,最后应用到了我们的取值中。
📖为切片赋值
切片除了能够帮助我们快速取到想要的值之外,还能帮助我们进行序列的原地修改,删除,或者链接。
这一切操作只需要将其看作一个变量放在赋值符号的左边,请看下面这个·例子:
# 创建示例列表
example_list_04 = list(range(10))
print(example_list_04)
# 对序列中部分元素进行赋值
example_list_04[7:9] = [99,100]
print(example_list_04)
# 将序列中的两个元素赋一个数字
example_list_04[7:9] = [10000]
print(example_list_04)>>>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>[0, 1, 2, 3, 4, 5, 6, 99, 100, 9]
>>>[0, 1, 2, 3, 4, 5, 6, 10000, 9]
在上述例子中,我们将切片看作一个变量,从而对其进行快速赋值。但是在使用这个方式对切片部分进行赋值的时候需要等号的右边是一个可迭代的对象,如果我们将等号右边的位置仅安置了一个变量,那么就会报错,像下面这样:
example_list_04[8:10] = 10>>> TypeError: can only assign an iterable
正确的撰写方式如下:
example_list_04[8:10] = [10]
print(example_list_04)>>> [0, 1, 2, 3, 4, 5, 6, 10000, 10]
另外,我们还可以使用del将其作为一个删除的对象操作,例如:
example_list_05 = list(range(10))
print(example_list_05)
del example_list_05[5:8]
print(example_list_05)>>>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>[0, 1, 2, 3, 4, 8, 9]
可以看到通过使用del我们将序列中间的部分内容删除了。
📍总结
在本文中,我们介绍了切片强大的功能,这其中包括切片对象、切片赋值多种用法。在编程中灵活使用这些语法会使得我们的程序更易读简洁。
如果你感觉本文对你有帮助,不妨给我收藏点赞,如果对于本文所介绍的东西有问题可以私信我或者评论与我讨论,我们下次再见。

相关文章:
【python进阶】序列切片还能这么用?切片的强大比你了解的多太多
📚引言 🙋♂️作者简介:生鱼同学,大数据科学与技术专业硕士在读👨🎓,曾获得华为杯数学建模国家二等奖🏆,MathorCup 数学建模竞赛国家二等奖🏅,…...
[数据结构]直接插入排序、希尔排序
文章目录排序的概念和运用排序的概念排序运用常见的排序算法常见的排序算法直接插入排序希尔排序性能对比排序的概念和运用 排序的概念 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操…...
CNN、LeNet、AlexNet、VGG、GoogLeNet、RCNN、Fast RCNN、Faster RCNN、YOLO、YOLOv2、SSD等的关系
卷积神经网络的现状1943年美国数学家提出人工智能1949年心理学家建立神经元模型1957年弗兰克提出 感知器人工神经网络模型1980年建立多层感知器模型1984日本学者提出卷积神经网络原始模型神经感知机1998年提出LeNet-5卷积神经网络,并发展了其在音符和字符上的优势20…...
IO-day1-(fscanf、fprintf.........)
作业一、有一个usr.txt的文件,其中存储着用户的账户和密码,格式如下:zhangsan aaaalisi bbbbb空格前面是账户,空格后面是密码,一行一个账户、密码要求如下:从终端获取一个账户名和密码判断是否能够登录成功…...
C++类和对象(上篇)
目录 1.类的定义 2.类的访问限定符及封装 2.1类的访问限定符 2.2封装 3.类的作用域 4.类的实例化 5.类的大小 6.this 指针 1.类的定义 class className {// 类体:由成员函数和成员变量组成}; // 一定要注意后面的分号 class为定义类的关键字,Clas…...
解决Xshell无法连接Kali Linux 2020.1(2019.3)版本
使用Xshell远程终端工具连接虚拟机的Kali Linux却提示连接不上原因:Kali Linux默认没有打开SSH远程登录,SSH就是一种网络协议,用于加密的远程登录,所以在没有打开SSH协议之前是无法使用Xshell连接Kali Linux的。解决办法ÿ…...
项目文章 | 缓解高胆固醇血症 ,浒苔多糖如何相助?
文章标题:Polysaccharides from Enteromorpha prolifera alleviate hypercholesterolemia via modulating the gut microbiota and bile acid metabolism 发表期刊:Food & Function 影响因子:6.317 作者单位:福建医科大…...
Linux使用宝塔面板搭建网站,并内网穿透实现公网访问
文章目录前言1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4.固定http地址5. 配置二级子域名6.创建一个测试页面前言 宝塔面板作为简单好用的服务器运维管理面板,它支持Linux/Windows系统,我们可用它来一键配置LAMP/LNMP环境、网站、数据库、FTP等&…...
基于深度学习方法与张量方法的图像去噪相关研究
目录 1 研究现状 1.1 基于张量分解的高光谱图像去噪 1.2 基于深度学习的图像去噪算法 1.3 基于深度学习的高光谱去噪 1.4 小结 2 基于深度学习的图像去噪算法 2.1 深度神经网络基本知识 2.2 基于深度学习的图像去噪网络 2.3 稀疏编码 2.3.1 传统稀疏编码 2.3.2 群稀…...
Java基础知识之HashMap的使用
一、HashMap介绍 HashMap是Map接口的一个实现类(HashMap实现了Map的接口),它具有Map的特点。HashMap的底层是哈希表结构。 Map是用于保存具有映射关系的数据集合,它具有双列存储的特点,即一次必须添加两个元素…...
面试--每日一经
操作系统 死锁 死锁:是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。 死锁的四个必要条件 互斥条件:一个资源每次只能被一个进…...
JavaSE进阶之(十六)枚举
十六、枚举16.1 背景16.2 枚举类型16.3 EnumSet 和 EnumMap01、EnumSet02、EnumMap16.1 背景 在 Java 语言中还没有引入枚举类型之前,表示枚举类型的常用模式是声明一组 int 类型的常量,常常用的就是: public static final int SPRING 1; …...
全同态加密:TFHE
参考文献: Cheon J H, Stehl D. Fully homomophic encryption over the integers revisited[C]//Advances in Cryptology–EUROCRYPT 2015: 34th Annual International Conference on the Theory and Applications of Cryptographic Techniques, Sofia, Bulgaria, …...
【计算机二级】综合题目
计算机二级python真题 文章目录计算机二级python真题一、《大学慕课 两问 》二、综合应用题——价值链三、基本操作题 ——信息输出一、《大学慕课 两问 》 附件中的文件data.txt 是教育部爱课程网中国大学MOOC平台的某个 HTML页面源文件,里面包含了我国参与MOOC建设的一批大学…...
初识Kafka
介绍 Kafka Kafka 是一款基于发布与订阅的消息系统。 用生产者客户端 API 向 Kafka 生产消息,用消费者客户端 API 从 Kafka 读取这些消息。 Kafka 使用 Zookeeper 保存元数据信息。 Kafka 0.9 版本之前,除了 broker 之外, 消费者也会使用…...
【JavaEE】线程的状态
哈喽,大家好~我是保护小周ღ,本期为大家带来的是 Java 多线程的 线程的状态,New 新建状态,Runnable 运行状态,Blocked 阻塞状态,waiting 等待状态,Time_Waiting 超时等待状态,Termin…...
7个最受瞩目的 Python 库,提升你的开发效率
当今时代,数据分析和处理已经成为了各行各业中不可或缺的一环。Python作为一种非常流行的编程语言,为我们提供了许多强大的工具和库来处理不同类型的数据。 在这篇文章中,我将向您介绍七个非常有用的Python库,这些库各自有着独特…...
这些IT行业趋势,将改变2023
上一周,你被"AI"刷屏了吗? 打开任何一家科技媒体,人工智能都是不变的热门话题。周初大家还在用ChatGPT写论文、查资料、写代码,到周末的时候大家已经开始用GPT-4图像识别来做饭、Microsoft 365 Copilot 来写PPT了。 GP…...
蓝桥杯每日一真题——[蓝桥杯 2021 省 B] 杨辉三角形(二分+规律)
文章目录[蓝桥杯 2021 省 B] 杨辉三角形题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示思路:全部代码:[蓝桥杯 2021 省 B] 杨辉三角形 题目描述 下面的图形是著名的杨辉三角形: 如果我们按从上到下、从左到右的顺序把所有数排成一列&…...
<C++> 类和对象(下)
1.const成员函数将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。class A { public:void Print() //这里隐藏了A* this指针{cout <…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
