有关 python 切片的趣事

news2024/11/25 10:11:56

哈喽大家好,我是咸鱼

今天来讲一个我在实现 python 列表切片时遇到的趣事

在正式开始之前,我们先来了解一下切片(slice)

切片操作是访问序列(列表、字符串…)中元素的另一种方法,它可以访问一定范围内的元素,通过切片操作,可以生成一个新的序列

语法如下

name[start : end : step]
  • start 是切片的起始索引值,当 start 是序列首位时可以省略
  • end 是切片结束索引值,当 end 是序列末位时可以省略
  • step 为步长,可以不提供,默认是1,不能为0,为负数时表示列表翻转

需要注意的是,切片操作遵循包头不包尾的原则,即从序列的第 start 位索引起,向右取到后 end-1 位元素为止,按 m 间隔过滤

下面举一些关于切片的例子

# 获取列表的前 n 个元素:
lst = [1, 2, 3, 4, 5, 6]
n = 3
result = lst[:n]
print(result)  # [1, 2, 3]

# 获取列表的后 n 个元素:
lst = [1, 2, 3, 4, 5, 6]
n = 3
result = lst[-n:]
print(result)  # [4, 5, 6]

# 获取列表中的偶数元素:
lst = [1, 2, 3, 4, 5, 6]
result = lst[1::2]
print(result)  # [2, 4, 6]

# 获取列表中的奇数元素:
lst = [1, 2, 3, 4, 5, 6]
result = lst[::2]
print(result)  # [1, 3, 5]

# 获取列表中的倒数第二个元素:
lst = [1, 2, 3, 4, 5, 6]
result = lst[-2:-1]
print(result)  # [5]

# 获取列表中的最后两个元素:
lst = [1, 2, 3, 4, 5, 6]
result = lst[-2:]
print(result)  # [5, 6]

根据 GPT 的回答,Fortran 是最早支持切片语法的语言,历史上曾经有多种语言支持切片操作
在这里插入图片描述
上面这些语言虽然说都支持切片语法,但我觉得不够 python 那样的灵活简洁

  1. 简洁而直观的语法:

Python 的切片语法非常简洁和直观,使用起来非常方便。通过使用冒号(:)来指定起始位置、结束位置和步长,可以轻松地进行切片操作。

  1. 强大的切片功能:

Python 的切片语法不仅支持基本的切片操作,还可以使用负数索引和省略号(…)来处理更复杂的情况。这使得对列表、字符串、元组等序列类型的数据进行灵活的切片成为可能

再介绍完了切片之后,我们来进入正题,那天咸鱼在写一个关于列表切片操作的文档

现象

我们知道:根据单个索引进行取值时,如果索引越界,就会报错

list1 = [1,2,3]
print(list1[5])

"""
报错信息如下:
Traceback (most recent call last):
  File "E:\PycharmProjects\projects\demo\草稿纸.py", line 2, in <module>
    print(list1[5])
IndexError: list index out of range
"""

但是当咸鱼不小心将切片结束索引值设置成了超过了列表长度的值的时候,发现居然没有报错

list1 = [1,2,3]
print(list1[1:5]) # 结果[2, 3]

是不是很有趣,Python 中的切片操作不会引发索引越界的错误

关于这个现象,官方文档里面是有介绍的

The slice of s from i to j is defined as the sequence of items with index k such that i <= k < j. If i or j is greater than len(s), use len(s).

If i is omitted or None, use 0. If j is omitted or None, use len(s). If i is greater than or equal to j, the slice is empty.

也就是说,对于序列 s :

  • 当初始索引值或者结束索引值大于序列长度时,就用长度值(len(s))作为索引值
  • 当初始索引值没写或者是 None 时,用 0 作为初始索引值
  • 当结束索引值没写或者是 None 时,用序列长度值(len(s))作为初始索引值
  • 当初始索引值大于等于结束索引值时,结果为空对象
my_list = [1, 2, 3, 4, 5]

# 有效的切片范围
print(my_list[1:4])  # 输出: [2, 3, 4]

# 超出索引范围的切片,会自动调整为有效的索引
print(my_list[1:10])  # 输出: [2, 3, 4, 5]

# 负数索引也适用
print(my_list[-3:10])  # 输出: [3, 4, 5]

总结

Python 的切片语法设计得很安全,即使指定的切片索引超出了序列的长度,也不会引发索引越界错误。相反,它会自动调整切片范围,只返回有效的结果

当进行切片操作时,Python会根据切片的参数和可用的索引范围来确定切片的实际范围

虽然不知道龟哥为什么设计 Python 的切片语法要允许索引超出边界,而不是设计成抛出索引错误?

但是可以知道的是,这种设计使得切片操作更加灵活和方便,无需手动检查索引范围或引发索引越界异常

它允许我们在切片操作中不必担心边界情况,并且可以更加简洁地处理列表、字符串和其他序列类型的操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/630242.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

莱特兄弟的家庭教育

莱特兄弟的三个设计经验 你可以从他们如何使得一辆自行车飞行中学到很多东西 克莱夫汤普森 大家都知道莱特兄弟是第一个实现动力飞行的人——他们的飞机于1903年12月17日在北卡罗来纳州的基蒂霍克起飞。 但是在实现这一突破之前的过程? 这真是令人感兴趣&#xff0c;并且充满了…

【PWN · ret2text | ‘/bin/sh‘写在bss段】[HNCTF 2022 Week1]ezr0p32

目录 前言 一、题目 二、解题过程 payload的构造 三、exp 总结 前言 一直在做libc的中规中矩的题目&#xff0c;遇到一题有点老的类型的题目有些陌生。但其实其中原理比较简单&#xff0c;但是涉及到/bin/sh获取的常规操作&#xff0c;而自己也没整理过&#xff0c;于…

Git->分支

⭐作者介绍&#xff1a;大二本科网络工程专业在读&#xff0c;持续学习Java&#xff0c;努力输出优质文章 ⭐作者主页&#xff1a;逐梦苍穹 ⭐所属专栏&#xff1a;Git ⭐如果觉得文章写的不错&#xff0c;欢迎点个关注一键三连&#x1f609;有写的不好的地方也欢迎指正&#x…

springboot+vue体育馆场地器材管理系统的设计与实现

体育馆管理系统有管理员和用户两个角色。用户功能有场地信息&#xff0c;员工信息&#xff0c;器材信息&#xff0c;留言反馈&#xff0c;个人中心。管理员功能有个人中心&#xff0c;用户管理&#xff0c;场地信息管理&#xff0c;场地类型管理&#xff0c;员工信息管理&#…

Redis - 缓存雪崩,缓存穿透,缓存击穿

Redis是一个完全开源的&#xff0c;遵守BSD协议的&#xff0c;高性能的key-value的数据存储结构系统&#xff0c;它支持数据持久化&#xff0c;可以将内存中的数据保存在磁盘中。不仅支持简单的key-value类型的数据结构&#xff0c;同事还提供list&#xff0c;zset&#xff0c;…

ChatGPT+小红书的8种高级玩法

掌握了这套万能命令&#xff0c;让你快速做出小红书爆款文案! 一、用ChatGPT做定位 我是一个大龄的普通人&#xff0c;没有什么特殊的技能&#xff0c;接下来&#xff0c;请你作为一位小红书的账号定位专家&#xff0c;通过与我对话的方式&#xff0c;为我找到我的小红书账号定…

Hive | 报错锦集

知识目录 一、写在前面✨二、Hive启动hiveserver2报错&#x1f525;三、HiveServer2启动方式✨四、Hive执行SQL语句报一大堆日志&#x1f349;五、Hive使用Load加载数据报错&#x1f36d;六、Hive执行含Count的SQL语句报错&#x1f349;七、Hive执行SQL语句报/bin/java&#x1…

golang 读取csv文件到excel--推荐使用【不同实现方式】

需求&#xff1a;把下面的csv文件&#xff0c;自动写入到excel模版中&#xff0c; 1.自动按照csv的行数&#xff0c;以日期时间名问sheet名成写入到excel表的sheet名称中 2.自动复制excel的第一个sheet的所有内容&#xff0c;同时用csv文件的内容填充特定区域内容 xy1.csv文…

动态组件:类组件

函数组件的缺点&#xff1a; 第1次渲染组件&#xff0c;把函数执行&#xff0c;产生一个私有的上下文: EC(V)&#xff0c;把解析出来的props「含children」 传递进来「但是被冻结了」&#xff0c;对函数返回的JSX元素「virtualDOMJ进行渲染。当我们点击按钮的时候&#xff0c;…

信道容量详解

本专栏包含信息论与编码的核心知识&#xff0c;按知识点组织&#xff0c;可作为教学或学习的参考。markdown版本已归档至【Github仓库&#xff1a;https://github.com/timerring/information-theory 】或者公众号【AIShareLab】回复 信息论 获取。 文章目录 信道容量信道容量的…

Django--创建项目与app的初步认识

目前我是想学习Django来搭建一个网站&#xff0c;记录一下我学初学的过程与遇到的问题。 我直接使用pycharm来创建一个Django项目&#xff0c;就不用在终端输入命令行的方式创建虚拟环境。 在终端输入&#xff0c;python manage.py runserver&#xff0c;点击连接web页面进行测…

为什么说python里面函数参数的默认值最好不要使用可变类型

之前发布过Python中函数的介绍&#xff1a;Python中函数的介绍 &#xff0c;今天来做一个小小的补充说明&#xff1a;为什么说python里面函数参数的默认值最好不要使用可变类型 Python中&#xff0c;函数参数的默认值是在函数定义时计算的&#xff0c;而不是在每次函数调用时计…

机器人与外星人的对话:中国传统哲学的精髓是什么?

一天&#xff0c;机器人Robot和外星人Vick相遇&#xff0c;他俩聊了很多&#xff0c;主要是关于中国传统哲学的&#xff0c;下面是他俩的对话记录。 R&#xff1a;很多人表示他们很痛苦&#xff0c;禅师说那是因为“无明”&#xff0c;外星人&#xff0c;你怎么看&#xff1f; …

【P58】JMeter 简单数据写入器(Simple Data Writer)

文章目录 一、简单数据写入器&#xff08;Simple Data Writer&#xff09;参数说明二、准备工作三、测试计划设计 一、简单数据写入器&#xff08;Simple Data Writer&#xff09;参数说明 可以将原始数据直接保存到文件 使用场景&#xff1a;一般与 HTML 报告配合使用 使用…

【Python文本处理】基于运动路线记录GPX的文件解析,及对经纬度坐标的数学模型运动速度求解

【Python文本处理】基于运动路线记录GPX的文件解析&#xff0c;及对经纬度坐标的数学模型运动速度求解 解析 GPX文件格式 GPX文件本身其实就是坐标、海拔、时间、心率等综合性的xml文件 如图&#xff1a; 海拔&#xff1a;ele 时间&#xff1a;time 心率&#xff1a;heartr…

【用pytorch进行LSTM模型的学习】

用pytorch进行LSTM模型的学习 LSTM模型用pytorch&#xff0c;采用LSTM对seaborn数据集做预测基本步骤数据的观察特殊数据处理数据归一化模型的构建与选择模型的保存 飞机航班流量预测示例 LSTM模型 LSTM模型长下面这样&#xff0c;主要用在时间序列的预测&#xff0c;具有比RN…

5Why分析法

5Why分析法 由丰田公司的大野耐一提出的对一个问题点连续以5个“为什么”来自问&#xff0c;以追究其根本原因的分析方法。 模型介绍 所谓5Why分析法&#xff0c;又称“5问法”&#xff0c;也就是对一个问题点连续以5个“为什么”来提问&#xff0c;以追究其根本原因。虽为5个…

代码随想录第53天

1.最长公共子序列&#xff1a; 红字的问题都是和最长重复子数组那题的代码进行比较的出来的 动规五部曲分析如下&#xff1a; 确定dp数组&#xff08;dp table&#xff09;以及下标的含义 dp[i][j]&#xff1a;长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串tex…

solidity之智能拍卖案例

文章目录 实现一个简易的拍卖状态变量定义和初始化竞拍功能结束竞拍代码 实现一个简易的拍卖 角色分析&#xff1a;4类角色&#xff08;拍卖师actioneer&#xff0c;委托人seller&#xff0c;竞买人bidder&#xff0c;买受人buyer&#xff09; 功能分析&#xff1a;拍卖的基本…

Shell脚本攻略:Linux防火墙(一)

目录 一、理论 1.安全技术 2.防火墙 3.通信五元素和四元素 4.总结 二、实验 1.iptables基本操作 2.扩展匹配 3. 自定义链接 一、理论 1.安全技术 &#xff08;1&#xff09;安全技术 ①入侵检测系统&#xff08;Intrusion Detection Systems&#xff09;&#xff1…