当前位置: 首页 > news >正文

【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 数学建模竞赛国家二等奖🏅&#xff0c…...

[数据结构]直接插入排序、希尔排序

文章目录排序的概念和运用排序的概念排序运用常见的排序算法常见的排序算法直接插入排序希尔排序性能对比排序的概念和运用 排序的概念 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操…...

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的。解决办法&#xff…...

项目文章 | 缓解高胆固醇血症 ,浒苔多糖如何相助?

文章标题: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是用于保存具有映射关系的数据集合,它具有双列存储的特点,即一次必须添加两个元素&#xf…...

面试--每日一经

操作系统 死锁 死锁:是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。   死锁的四个必要条件 互斥条件:一个资源每次只能被一个进…...

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成员函数&#xff0c;const修饰类成员函数&#xff0c;实际修饰该成员函数隐含的this指针&#xff0c;表明在该成员函数中不能对类的任何成员进行修改。class A { public:void Print() //这里隐藏了A* this指针{cout <…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发&#xff0c;后来由Pivotal Software Inc.&#xff08;现为VMware子公司&#xff09;接管。RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写。广泛应用于各种分布…...

Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程

鸿蒙电脑版操作系统来了&#xff0c;很多小伙伴想体验鸿蒙电脑版操作系统&#xff0c;可惜&#xff0c;鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机&#xff0c;来体验大家心心念念的鸿蒙系统啦&#xff01;注意&#xff1a;虚拟…...

门静脉高压——表现

一、门静脉高压表现 00:01 1. 门静脉构成 00:13 组成结构&#xff1a;由肠系膜上静脉和脾静脉汇合构成&#xff0c;是肝脏血液供应的主要来源。淤血后果&#xff1a;门静脉淤血会同时导致脾静脉和肠系膜上静脉淤血&#xff0c;引发后续系列症状。 2. 脾大和脾功能亢进 00:46 …...