当前位置: 首页 > 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 <…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分&#xff1a;派生类构造函数与析构函数 当创建一个派生类对象时&#xff0c;基类成员是如何初始化的&#xff1f; 1.当派生类对象创建的时候&#xff0c;基类成员的初始化顺序 …...

tomcat入门

1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效&#xff0c;稳定&#xff0c;易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...