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

新手避坑指南:用Prometheus+PX4+ROS在Gazebo里复现无人机追踪小车(保姆级流程)

新手避坑指南&#xff1a;用PrometheusPX4ROS在Gazebo里复现无人机追踪小车&#xff08;保姆级流程&#xff09; 当第一次接触无人机仿真开发时&#xff0c;很多人会被复杂的工具链和晦涩的错误信息劝退。本文将手把手带你完成从零搭建仿真环境到实现视觉追踪的全过程&#xff…...

Qwen3-0.6B-FP8多语言落地:支持粤语、闽南语、藏语等方言指令理解实测

Qwen3-0.6B-FP8多语言落地&#xff1a;支持粤语、闽南语、藏语等方言指令理解实测 1. 引言&#xff1a;当AI能听懂你的家乡话 想象一下&#xff0c;你正在用粤语和AI助手聊天&#xff0c;让它帮你写一份工作报告&#xff1b;或者用闽南语问它今天的天气&#xff0c;它不仅能听…...

嵌入式系统SOC验证与Linux实时补丁技术解析

嵌入式系统软件工程师面试技术要点解析 1. SOC原型验证技术体系 1.1 SOC验证工作内容与方法论 SOC原型验证是芯片设计流程中的关键环节&#xff0c;主要工作内容包括&#xff1a; 功能验证&#xff1a;确保设计符合规范要求 性能验证&#xff1a;评估系统吞吐量、延迟等指标…...

2026年上海网站建设市场分析:企业官网从展示到增长的演进路径

2026年&#xff0c;上海企业数字化服务市场迎来结构性变革。据2026年上半年上海企业数字化服务市场调研数据显示&#xff0c;上海地区企业官网新建与升级需求同比增长45%&#xff0c;中大型企业对官网的核心诉求已从基础信息展示转向AI智能赋能、全球化跨境适配、全链路营销转化…...

ente/auth缓存机制详解:提高系统响应速度

ente/auth缓存机制详解&#xff1a;提高系统响应速度 【免费下载链接】ente 完全开源&#xff0c;端到端加密的Google Photos和Apple Photos的替代品 项目地址: https://gitcode.com/GitHub_Trending/en/ente ente/auth作为专注于移动设备的两步验证&#xff08;2FA&…...

新手友好:在快马平台用mc、jc相关案例轻松上手前端开发

作为一个刚接触前端开发的新手&#xff0c;我最近在InsCode(快马)平台尝试做了一个特别适合练手的小工具——代码行数统计器。这个项目用最基础的HTML、CSS和JavaScript实现&#xff0c;但包含了前端开发的几个核心概念&#xff0c;特别适合想通过实际案例学习的朋友。 项目功能…...

Llama-3.2V-11B-cot应用场景:跨境电商多语言商品图信息提取案例

Llama-3.2V-11B-cot应用场景&#xff1a;跨境电商多语言商品图信息提取案例 1. 项目背景与价值 跨境电商平台每天需要处理海量商品图片&#xff0c;传统人工标注方式面临三大痛点&#xff1a; 语言障碍&#xff1a;商品图可能包含多种语言的文字信息效率瓶颈&#xff1a;人工…...

Matlab中的QRBiGRU分位数回归双向门控循环单元模型:多图输出与多指标评估的时间序列区间预测

Matlab实现基于QRBiGRU分位数回归双向门控循环单元的时间序列区间预测模型&#xff1a; 1.Matlab实现基于QRBiGRU分位数回归双向门控循环单元的时间序列区间预测模型 2.多图输出、多指标输出(MAE、RMSE、MSE、R2)&#xff0c;多输入单输出&#xff0c;含不同置信区间图、概率密…...

零代码也能构建智能登录系统?Dify工作流让你告别繁琐的前端开发

零代码也能构建智能登录系统&#xff1f;Dify工作流让你告别繁琐的前端开发 【免费下载链接】Awesome-Dify-Workflow 分享一些好用的 Dify DSL 工作流程&#xff0c;自用、学习两相宜。 Sharing some Dify workflows. 项目地址: https://gitcode.com/GitHub_Trending/aw/Awes…...

ESP32上给LVGL做个‘懒加载’:分页与动态读取大文本的实战对比(附代码)

ESP32上LVGL大文本显示优化&#xff1a;分页加载与动态读取的深度对比与实践 在嵌入式设备上处理大文本显示一直是开发者面临的挑战之一。当我们在ESP32这样的资源受限平台上使用LVGL&#xff08;Light and Versatile Graphics Library&#xff09;显示超长文本时&#xff0c;如…...