第10讲:Python列表对象查操作之通过切片获取列表中的元素

news/2024/4/20 5:56:52/文章来源:https://blog.csdn.net/weixin_44953658/article/details/128109344

文章目录

    • 1.切片获取列表中的技术要点
      • 1.1切片获取列表中的概念总结
      • 1.2.切片的语法格式以及含义
    • 3.使用切片方法获取列表中元素
      • 3.1.定义一个原始列表列表
      • 3.2.当step步长为正数时切片的案例
      • 3.3.当step步长为负数时切片的案例
      • 3.4.使用负数索引作为切片范围
    • 4.将切片后的列表赋值给新的变量
    • 5.切片操作获取列表中的多个元素允许索引越界
    • 6.调用slice函数方法实现切片获取列表元素的效果
    • 7.一次打印多个不连续的元素
    • 8.使用切片一次性打印列表的全部元素

1.切片获取列表中的技术要点

1.1切片获取列表中的概念总结

使用切片的方法获取列表中的一个或多个元素,是Python编程中经常要用的代码片段,一定要搞明白。

所谓的切片,指的是根据条件从列表中截取了一份片段,这个片段仍然是以列表的形式返回,简单理解为就是根据切片条件截取了列表中部分的元素。

在上面通过索引名一次我们只能获取一个列表元素,当使用切片的方法时,一次就可以获取列表中的多个元素。

切片的使用也非常简单,指定要获取的元素在列表中的索引范围,即可将这个索引号范围内的元素全部读取出来,使用切片获取列表中的索引时,声明的索引号范围一定是一个连续且有规律的,通过切片一次可以读取列表中的一个元素或者多个元素。

注意使用切片获取列表中的元素时,只能获取一个连续范围的索引所对应的元素,不能获取不连续的索引对应的元素,例如我想获取索引号为1/5/9的元素,这种需求切片是做不到的,切片只能读取到连续范围的索引对应的元素,例如获取索引号为1-5对应的元素。

1.2.切片的语法格式以及含义

切片可以不单单可以对列表进行切片,还可以对变量、字典、字符串等等进行切片。

print(列表名称[start:stop:step])#start:起始索引号
#stop:结束索引号
#step:步长例子:print(mylist[1:5:1])
#解释:打印出mylist列表中索引号1~5,但不输出索引5对应的元素,其他索引对应的元素都会被打印,步长为1。

在切片的语法中,有一些注意的点:

  • 在使用切片时,切片后得到的仍然是一个列表,切片后的列表只是原列表中的一部分。
  • 使用切片时指定了stop结束索引号,在得到的切片中不会包括stop结束索引对应的元素,切片只会截取start到stop范围之内索引对应的元素,会包括start起始索引对应的元素,不会包括stop结束索引对应的元素。
  • 使用切片时,如果不指定step步长,默认值为1,此时的切片语法格式可以简化成[start:stop]
  • 另外当step步长值为正数时:
    • 如果不指定start起始索引,切片的第一个元素默认是列表中的第一个元素。
    • 如果不指定stop结束索引,切片的最后一个元素默认是列表中的最后一个元素。
    • 如果指定了start、stop,当step为正数时,从start起始索引处,包含起始索引对应的元素,开始往后计算切片。
  • 另外当step步长值为负数时:
    • 如果不指定start起始索引,切片的第一个元素默认是列表中的最后一个元素。
    • 如果不指定stop结束索引,切片的最后一个元素默认是列表中的第一个元素。
    • 如果指定了start、stop,当step为负数时,从start起始索引处,包含起始索引对应的元素,开始往前计算切片。

在切片中,无论step是正数还是负数,只是切片的顺序不同,当step是正数时,切片会从start处向右(往后)开始切片,当step是负数时,切片会从start处向左(往前)开始切片。

在使用切片获取列表中的元素时,一般都使用大于0的索引作为范围,去读取列表中一个范围内的元素。

3.使用切片方法获取列表中元素

3.1.定义一个原始列表列表

image-20220728164429195

将上图中的列表定义出来,我在图中标记了列表中每个元素的索引号,下面我们通过切片获取元素时,就有了上图的参考依据。

##定义一个列表
mylist = ["jiangxl", "jiangxiaolong", "bjjtdx", "devops", "python", 11, 22, 33, 89]
print(list(mylist))

3.2.当step步长为正数时切片的案例

当step步长值为正数时:

  • 如果不指定start起始索引,切片的第一个元素默认是列表中的第一个元素。
  • 如果不指定stop结束索引,切片的最后一个元素默认是列表中的最后一个元素。
  • 如果指定了start、stop,当step为正数时,从start起始索引处,包含起始索引对应的元素,开始往后计算切片。

当step步长为正数时,切片的顺序是从列表的第一个元素向后找索引范围进行切片。

1)使用切片获取索引号1到7范围内的元素,并指定步长为2

分析:要获取索引1~7这几个索引对应的多个元素,需要通过切片来实现,使用切片时指定起始索引号为1,结束索引号为7,步长为2,切片是不会获取结束索引对应的元素,根据上图元素与索引的对应关系,本次需求获取的结果将会是:[jiangxiaolong, jsjkxjs, python]

#使用切片获取索引号1到7范围内的元素,并指定步长为2
print(mylist[1:7:2])
#输出结果:['jiangxiaolong', 'jsjkxjs', 'python']

指定的结束索引对应的元素不会列入切片后的列表中,相当于被切片的范围只是索引号16对应的元素,但是指定了步长为2(间隔为1),16索引号对应的元素每隔1位取一个元素划入到切片列表中,从而得到如下结果。

image-20220729101130832

切片的范围是索引17,但是结束索引不会被列入到切片的范围内,此时切片的范围仅是16这几个索引,步长为2间隔就为1,因此1~6这几个索引会每隔1位取一个,最终只会取出1/3/5这三个索引对应的元素,作为切片列表。

image-20220729101905081

2)使用切片获取索引1到7范围内的元素,不指定步长

分析:需求和上一个一样,只不过不指定步长,不指定步长时,步长值为1,间隔为0,此时就会打印出切片范围内索引对应的所有元素。

#使用切片获取索引1到7范围内的元素,不指定步长
'''在切片的语法格式中,存在三个参数:start:stop:step切片的三个参数可以选择性的使用,当不需要指定某个参数时:如果这个参数是start、stop,那么直接写上:就表示使用这个参数使用默认值,我们不指定该参数的具体值。例如:[6:](不指定stop的值)、[:6](不指定start的值)如果这个参数是step,可以写上:表示使用默认值,也可以省略不写,此时的切片语法格式就是[start:stop]例如:[6:11:]、[6:11]'''
#两种写法:使用:声明step步长使用默认值,或者直接不写step参数
print(mylist[1:7:])
print(mylist[1:7])#输出结果:['jiangxiaolong', 'bjjtdx', 'jsjkxjs', 'devops', 'python', 11]

image-20220729103717388

3)使用切片获取整个原列表中的所有元素

当不指定start起始索引和stop结束索引是,步长使用默认值,就会得到一个完整的原列表元素。

##切片整个原列表中的所有元素
print(mylist[::])#输出结果:
['jiangxl', 'jiangxiaolong', 'bjjtdx', 'jsjkxjs', 'devops', 'python', 11, 22, 33, 89]

image-20220729104219846

3.3.当step步长为负数时切片的案例

当step步长值为负数时:

  • 如果不指定start起始索引,切片的第一个元素默认是列表中的最后一个元素。
  • 如果不指定stop结束索引,切片的最后一个元素默认是列表中的第一个元素。
  • 如果指定了start、stop,当step为负数时,从start起始索引处,包含起始索引对应的元素,开始往前计算切片。

当step步长为负数时,切片的顺序是相反的,从列表的最后一个元素向前找索引范围进行切片。

1)使用切片获取整个原列表中的所有元素,指定step步长为-1

当step步长为负数时,如果不指定start和stop,就会从列表中最后一个元素处向前一直到第一个元素处,进行切片,此时获取的切片列表就是和原列表完全反向。

print(mylist[::-1])#输出结果:[89, 33, 22, 11, 'python', 'devops', 'jsjkxjs', 'bjjtdx', 'jiangxiaolong', 'jiangxl']

image-20220729105253027

2)使用切片获取索引8到0范围内的元素,指定步长为-2

分析:使用切片获取8~0索引对应的元素,从切片的范围上明显是一个反向范围的切片,步长为-2更说明了这一点,step步长为负数时,就会从指定的起始索引处向前(左)开始切片,结束索引依旧不会列入到切片列表中,如下图所示,反向切片后,从索引8处开始切片,结束索引0不列入切片中,步长的间隔为1,最终就会打印出索引8/6/2/4对应的元素。

image-20220729105649606

print(mylist[8:0:-2])#输出结果;[33, 11, 'devops', 'bjjtdx']

当步长为负数时,从列表中反向切片,因此索引8对应的元素会打印在最前面,切片返回的也是一个列表,如果从中切片列表上看,索引8在切片后就会称为索引0。

image-20220729110106214

3)使用切片片获取0到8范围内的元素,指定步长为-2

分析:步长为负数,反向切片,0是起始索引,如前面的列表示意图所示,索引0前面没有任何元素了,作为负数步长来说,索引0是列表中的最后一个元素,而步长为-2,间隔就是1,那么此时是不会返回任何元素的,会返回一个空列表。

print(mylist[0:8:-2])#输出结果:[]

4)切片时指定起始索引为5,不指定结束索引,指定步长为-2

分析:切片的起始索引为5,不指定结束索引,当步长为负数,默认的结束索引就是列表中的第一个元素,反向切片,步长为-2,间隔为1,每隔1位切片一个元素,最终索引5/3/1对应的元素会被切片出来。

image-20220729110653945

print(mylist[5::-2])#输出结果:['python', 'jsjkxjs', 'jiangxiaolong']

image-20220729110823478

5)切片时不指定起始索引,指定结束索引为7,步长为-2

分析:当步长为负数时,不指定起始索引,默认是从列表中最后一个元素处切片,结束索引为7,那么范围就是最后一个元素索引到索引7之内的元素,步长为-2,那么间隔就为1,范围不大,最后只会打印出起始索引(最后一个元素)这一个元素。

image-20220729111153732

print(mylist[:7:-2])#输出结果:[89]

image-20220729111227701

3.4.使用负数索引作为切片范围

列表中的元素都有2个索引,在3.3.2和3.3.3中,我们都是用元素的正数索引进行切片的,下面我用负数索引切片。(大多数情况下都是用正数索引作为切片范围的)

道理都一样,负数索引是从-1开始,值约小约靠后,值约大约靠前。

当步长为正数时,从指定的起始索引处向后开始切片,当步长为负数时,从指定的起始索引处向前切片。

1)步长为正数,使用负数索引作为切片范围

切片的范围从索引-10一直到索引-2,步长为正数2,从第一个索引-10处向后切片,一直到结束索引-2,-2不会列入到切片中,并且本次的步长为2,间隔就为1,最终索引-10、-8、-6、-4对应的元素会被切片出来。

-10到-2相当于0到8,一般都会用正数作为切片范围,看起来爽快。

image-20220729111807657

print(mylist[-10:-2:2])#输出结果;['jiangxl', 'bjjtdx', 'devops', 11]

2)步长为负数,使用负数索引作为切片范围

切片的范围从索引-3一直到索引-9,步长为负数-2,从第一个索引-3处向后切片,一直到结束索引-9,-9不会列入到切片中,并且本次的步长为-2,间隔就为1,反向切片,最终索引-3、-5、-7对应的元素会被切片出来。

image-20220729112134625

print(mylist[-3:-9:-2])#输出结果:[22, 'python', 'jsjkxjs']

4.将切片后的列表赋值给新的变量

使用切片从原列表中取出多个元素后,会形成一个新的列表,可以将切片后的列表赋给另一个变量。

mylist = ["jiangxl", "jiangxiaolong", "bjjtdx", "jsjkxjs", "devops", "python", 11, 22, 33, 89]
mylist2 = mylist[1:7:2]
print(mylist2)#输出结果;['jiangxiaolong', 'jsjkxjs', 'python']

5.切片操作获取列表中的多个元素允许索引越界

什么是索引越界呢?指的是从列表中取元素时,指定的索引在列表中不存在,这就叫越界,在之前使用索引去元素时,当索引在列表中不存在时,就会抛出valueerror的异常。

当使用切片操作获取元素时,指定的索引在列表中不存在时,则不会报错,会将列表中能够承受范围的所有元素全部输出。

##列表中的最后一个元素的正数索引是9,我们通过切片指定结束索引是100,观察效果
print(mylist[:100])
#100索引在列表中不存在,且列表中的最大索引是9,此时Python就会将能够承受范围的全部元素输出出来,也就是会将列表中的全部元素输出
#输出结果:['jiangxl', 'jiangxiaolong', 'bjjtdx', 'jsjkxjs', 'devops', 'python', 11, 22, 33, 89]##列表中的最大的负数索引是-10,也是列表中的第一个元素,我们通过切片指定起始索引是-100,观察效果
print(mylist[-100:])
#此时也会将全部元素输出出来:['jiangxl', 'jiangxiaolong', 'bjjtdx', 'jsjkxjs', 'devops', 'python', 11, 22, 33, 89]

6.调用slice函数方法实现切片获取列表元素的效果

调用slice函数方法也可以实现切片获取列表多个元素的效果,slice函数的输出结果和切片操作是相同的。

调用slice函数有三种方式:

  • 只指定stop结束索引。
  • 指定start起始索引和stop结束索引。
  • 指定start起始索引和stop结束索引以及step步长。

slice函数的语法格式:

slice(stop)
slice(start,stop)
slice(start,stop,step)对于slice函数而言:start、stop、step三个参数的值都是None,并没有默认实际值

1)定义一个列表

mylist = ["jiangxl", "jiangxiaolong", "bjjtdx", "devops", "python", 11, 22, 33, 89]
print(list(mylist))

2)获取索引1到7范围内的元素,并指定步长为2

#切片实现
print(mylist[1:7:2])
#slice函数实现
print(mylist[slice(1,7,2)])

image-20220729114626202

3)获取列表中全部的元素

#切片实现
print(mylist[::])
#slice函数实现
print(mylist[slice(None, None, None)])

image-20220729114815047

4)获取索引1到7范围内的元素,不指定步长

#切片实现
print(mylist[1:7])#slice函数实现
print(mylist[slice(1,7)])
print(mylist[slice(1,7,None)])

image-20220729115110757

5)仅指定结束索引

在切片操作中,如果只指定结束索引,步长是正数,那么起始索引默认是从列表中第一个元素处开始切片,slice函数也是相同的原理,如果起始索引start为None,步长为None或者正数,默认也是从列表的第一个元素处开始切片。

#切片实现
print(mylist[:8])
print(mylist[:-8])#slice函数实现
print(mylist[slice(8)])
print(mylist[slice(-8)])
print(mylist[slice(None, 8, None)])

image-20220729115501221

7.一次打印多个不连续的元素

如果我们想打印列表中的多个元素,且元素的索引不是连续的,无法通过切片来打印,基于这种情况,也可以使用笨方法,如下所示打印多个元素,一般情况下,要么遍历列表中的所有元素,要么也是通过切片打印连续的多个元素,很少有这种需求。

print([mylist[2], mylist[5]])mylist3 = [mylist[2], mylist[5]]
print(mylist3)

8.使用切片一次性打印列表的全部元素

mylist = ["jiangxl", "linux", "k8s", "devops", 789, 987]
print(mylist[:])

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode】No.103. Binary Tree Zigzag Level Order Traversal -- Java Version

题目链接:https://leetcode.com/problems/binary-tree-zigzag-level-order-traversal/ 1. 题目介绍(Binary Tree Zigzag Level Order Traversal) Given the root of a binary tree, return the zigzag level order traversal of its nodes’…

【学习笔记67】JavaScript中的闭包

一、认识函数的过程 1. 定义 在堆内存中开辟一段内存空间(XF001)把函数体的内容,完全百分百的照抄一份,存放在内存空间中(XF001)把内存空间的地址(XF001) 赋值给函数名2. 调用 根据函数名内存储的地址 (XF001) ,去堆内存中找到对应函数会去…

R语言法国足球联赛球员多重对应分析(MCA)

数据集 fooball球员在场上的位置 数据来自国际足联的视频游戏FIFA 。游戏的特点是在游戏的各个方面评价每个球员的能力。等级是量化变量(介于0和100之间),但我们将它们转换为分类变量。所有能力都被编码在4个等级:1.低/ 2.平均/ …

基于单片机技术的自动停车器的设计

目 录 摘 要 I Abstract II 1绪论 1 1.1课题研究背景 1 1.2国内外发展现状 1 1.3汽车自动停车器的研究目的 2 1.4课题研究的意义 2 2汽车停车器的功能设计 3 2.1汽车自动停车器的设计要求 3 2.2停车器的主要功能 3 3汽车自动停车器的硬件设计 5 3.1汽车自动停车器的硬件组成 5 …

数据存储——存储视频

数据存储——存储视频视频的数字化一、视频采样二、视频量化总结:视频数字化的过程视频的数字化 1.视频是图像(帧)在时间上的表示 图象是离散的视频,视频是连续的图像 2.视频储存 每一帧图像或帧被转化为位模式并加以储存 一、视…

三年城市NOH落地100城,毫末智行内部信剑指2025

11月29日,毫末智行董事长张凯、CEO顾维灏联合发布《毫末智行三周岁:三年磨一剑 利刃开新篇》的内部信,提到毫末愿景及战略目标:“让机器智能移动,给生活更多美好。”未来成长为一家产品矩阵覆盖全无人驾驶、机器人等多…

【Android App】Vulkan实现宇宙中旋转雷达动画效果(附源码和原始视频 超详细必看)

需要源码请点赞关注收藏后评论区留言私信~~~ 一、Vulkan简介 Vulkan是一个跨平台的图形绘制接口,被称为下一代OpenGL,因为尽管OpenGL提供了丰富的图形API,但他在底层实现的C代码早已封装起来,由于开发者修改不了底层代码&#xf…

​GENIUS: 根据草稿进行文本生成的预训练模型,可用于多种NLP任务的数据增强...

©PaperWeekly 原创 作者 | 郭必扬 单位 | 上海财经大学信息管理与工程学院AI Lab论文标题:GENIUS: Sketch-based Language Model Pre-training via Extreme and Selective Masking for Text Generation and Augmentation论文作者:Biyang Guo, Yeyu…

多线程,了解-概念-实现方式-常见方法-安全问题-死锁-生产者消费者

了解 简单了解多线程 是指从软件或者硬件上实现多个线程并发执行的技术。 具有多线程能力的计算机因有硬件支持而能够在同一时间执行多个线程,提升性能。 简单了解多线程 简单了解多线程 简单了解多线程 简单了解多线程 概念 线程相关的概念 并行:在同…

【车载开发系列】UDS诊断---电控单元复位 ($0x11)

【车载开发系列】UDS诊断—电控单元复位($0x11) UDS诊断---电控单元复位($0x11)【车载开发系列】UDS诊断---电控单元复位($0x11)一.概念定义二.应用场景三.报文格式1)请求2)肯定响应…

Spark 3.0 - 8.ML Pipeline 之决策树原理与实战

目录 一.引言 二.决策树基础-信息熵 三.决策树的算法基础 - ID3 算法 四.ML 中决策树的构建 1.信息增益计算 2.连续属性划分 五.ML 决策树实战 1.Libsvm 数据与加载 2.StringIndexer 3.VectorIndexer 4.构建决策树与 Pipeline 5.测试与评估 6.获取决策树 六.总结…

基于PHP+MySQL企业网络推广平台系统的设计与实现

企业网络推广平台系统具有很强的信息指导性特征,采用PHP开发企业网络推广平台系统 给web带来了全新的动态效果,具有更加灵活和方便的交互性。在Internet中实现数据检索越来越容易,可以及时、全面地收集、存储大量的企业资源信息以及进行发布、浏览、搜索相关的信息。让企业、个…

C++ Reference: Standard C++ Library reference: Containers: list: list: cend

C官网参考链接&#xff1a;https://cplusplus.com/reference/list/list/cend/ 公有成员函数 <list> std::list::cend const_iterator cend() const noexcept; 返回结束的常量迭代器 返回一个指向容器结束后元素的const_iterator。 const_iterator是指向const内容的迭代…

Spring Boot FailureAnalyzer 应用场景

Spring Boot 自定义FailureAnalyzer 今天在学习Spring Boot 源码的过程中&#xff0c;在spring.factories 文件中无意中发现了FailureAnalyzer 这个接口。由于之前没有接触过&#xff0c;今天来学习一下 FailureAnalyzer 接口的作用。 在学习FailureAnalyzer之前, 我们先看以…

TMA三均线股票期货高频交易策略的R语言实现

趋势交易策略是至今应用最广泛以及最重要的投资策略之一&#xff0c;它的研究手段种类繁多&#xff0c;所运用的分析工具也纷繁复杂&#xff0c;其特长在于捕捉市场运动的大方向。股指期货市场瞬息万变&#xff0c;结合趋势分析方法&#xff0c;量化投资策略能够得到更有效的应…

Discourse 的左侧边栏可以修改吗

在默认的 Discourse 配置中&#xff0c;我们左侧的边栏可以根据自己的要求进行修改吗&#xff1f; 解决办法 针对自己登录的用户&#xff0c;你是可以自己调整左侧边栏的配置。 单击右上角你的个人头像&#xff0c;然后选择属性。 在切换的界面中&#xff0c;选择属性。 在出…

校园论坛(Java)——环境配置篇

校园论坛&#xff08;Java&#xff09;——环境配置篇 文章目录校园论坛&#xff08;Java&#xff09;——环境配置篇1、写在前面2、新建Maven项目2.1 引入相关依赖2.2 配置Tomcat环境3、项目发布测试4、项目代码5、参考资料1、写在前面 Windows版本&#xff1a;Windows10JDK版…

Python数据库编程之关系数据库API规范

Python关系数据库API规范 对于关系数据库的访问&#xff0c;Python社区已经制定出一个标准&#xff0c;称为Python Database API Specification。Mysql&#xff0c;Oracal等特定数据库模块遵从这一规范&#xff0c;而且可以添加更多特性。 高级数据库API定义了一组用于连接数…

YOLO V3 详解

YOLO V3 论文链接&#xff1a;YOLOv3: An Incremental Improvement 主要改进 Anchor: 9个大小的anchor&#xff0c;每个尺度分配3个anchor。Backbone改为Darknet-53, 引入了残差模块。引入了FPN&#xff0c;可以进行多个尺度的训练&#xff0c;同时对于小目标的检测有了一定…