七、Python第七课——有关列表的二三事(切片、切片的遍历和复制)

目录

一、切片 

二、遍历切片

三、列表的复制

一、切片 

       此前,我们学习了如何访问单个列表以及如何处理列表中的所有元素,那么我们如何处理列表中的部分元素呢?这就引出一个概念“切片” 。我们可以把列表看成是面包,“切片”就是要找出你最钟意的那部分进行处理(吃掉)。如此一来,这最钟意的部分一定有起点和终点。而且需要注意的是选择“切片”的全程是你告诉计算机这个傻瓜的,所以你需要指明“起点”和“终点”的下标。我读的这本书中,将下标写作为“索引”。说下标是为了和C语言做对比。

“切片”的语法规则:

#made by Jeffery
#10.19
players=['charles','martina','michael','florence','eli','jeffery']  #先构建一个运动员列表
print(players[1:5])   #print函数中的“players[1:5]”即是切片,表示输出列表中第2个元素到第5个元素

       这里举例,如果你想把列表中第2个元素到第5个元素组成的部分切出来,那么你的下标就应该是1——5,我们用一段代码举例说明:

#made by Jeffery
#10.19
players=['charles','martina','michael','florence','eli','jeffery']  #构建一个运动员列表
print(players[1:5])   #输出列表中第2个元素到第5个元素

       通过上面这个例子,我们应该再次清醒的认识到,机器语言中是从“0”开始的 !而我们计数第几个是从“1”开始的,所以第2个元素(人)对应的下标应该就是“1”(机器),第5个元素(人)对应的下表应该就是“4”(机器),但为啥在代码中是“5”呢?这是因为切片的终点和range()函数的末尾参数一样:都是到我们指定的终点下标的前一位停止的。我们指明切片的起点和终点后,就可以取出列表中的任一片段进行分析了。

       假如我们没有指明切片起点、终点中的任意一点,将会发生什么?(没有指明指的是没有数字,而不是“0”切记) 

#made by Jeffery
#10.19
players=['charles','martina','michael','florence','eli','jeffery']  #先构建一个运动员列表
print("未指明起点的切片结果:")
print(players[:5])   #未指明起点
print("未指明终点的切片结果:")
print(players[1:])   #未指明终点

 

从实验结果得出:切片->未指明起点,从列表起点“起”;未指明终点,至列表终点“终”。

 有人问,那要是切片的两个点(终点、起点)都没指明,那将会出现什么结果?起点没有,终点没有,那就是整个列表了,这种情况我也在下面的文章也有提到。除了上述介绍的三种切片的方法(1、有起点、终点;2、无起点、有终点;3、有起点、无终点),还有另外一种方法,就是之前学的“负数索引”,例如:

#made by Jeffery
#10.19
players=['charles','martina','michael','florence','eli','jeffery']  #先构建一个运动员列表
print(players[-3:])   #切出列表后三个元素

上述代码中使用“-3”下标成功切出列表后三个元素的切片!这一方法使得无论列表多长,我们都可以直接切出从“特定位置”开始,到列表末尾的切片。举一反三,如果我们的终点下标用负数,例如“-3”,就是切除列表头前3个元素的切片。切片说到这里还有一个注意的地方就是:要用“:”(冒号)分割起点和终点下标。

二、遍历切片

“遍历”就是都走一遍,都经历一遍,。那么,我们既然前面学了切片,那就直接用循环对切片进行遍历即可,这里有两种方法:

1、 先切片,后遍历。

#made by Jeffery
#10.19
players=['charles','martina','michael','florence','eli','jeffery']  #先构建一个运动员列表
players_2=players[0:3]            #切出一个列表
for player in players_2:            #对刚切出的列表进行循环、遍历print(player)                   #遍历的同时输出

 

2、切片与遍历“同时进行”

#made by Jeffery
#10.19
players=['charles','martina','michael','florence','eli','jeffery']  #先构建一个运动员列表
for player in players[0:3]:            #直接指明切片的起点和终点,并进行输出。print(player)                   

 这两种方法我觉得在结果上没什么区别,前者多使用了变量,后者是书中给出的标准用法。切片有以下几种使用情形:可以使用切片对数据进行批量处理;编写Web应用程序时可以使用切片来分页显示信息。

三、列表的复制

      列表的复制就是创建一个包含整个列表的切片,即不规定切片的起点和终点,有的同学就提问了,我不能直接把a列表赋值给b列表吗?我们接下来会用实际代码举例说明。

1、列表的复制

#made by Jeffery
#10.19
players=['charles','martina','michael','florence','eli','jeffery']  #先构建一个运动员列表
players_1=players[:]
print("原列表为:",players)
print("复制形成的列表为:",players_1)

 

从控制台的显示结果可以看出,我们确实通过切片复制、创建了一个新的列表,但这会不会就是同一个列表?(内存存储地址一致,只是分开显示了两次) 我们通过接下来的代码对其进行测试,看这两个列表在内存中是不是分开存储的?我们分别向这俩列表追加两个不同的元素,看其结果。

#made by Jeffery
#10.19
players=['charles','martina','michael','florence','eli','jeffery']  #先构建一个运动员列表
players_1=players[:]
players_1.append("jack")       #分别向这两个列表追加不同的元素(人名)再看结果
players.append("black")
print("原列表为:",players)
print("复制形成的列表为:",players_1)

实验证明,我们确实通过切片形成了一个新的列表:列表中的最后一个元素正如我们分别追加的两个元素,没有同时出现。

那么,我们现在来验证那位同学的猜想,是否可以通过直接赋值的方式来达到复制例表的目的?

#made by Jeffery
#10.19
players=['charles','martina','michael','florence','eli','jeffery']  #先构建一个运动员列表
players_1=players
print("原列表为:",players)
print("复制形成的列表为:",players_1)

目前看一切正常,那么我们使用同样的方法:向这两个列表追加两个不同的元素。

#made by Jeffery
#10.19
players=['charles','martina','michael','florence','eli','jeffery']  #先构建一个运动员列表
players_1=players
players.append("jack")         #向这两个列表分别追加不同的元素
players_1.append("black")
print("原列表为:",players)
print("复制形成的列表为:",players_1)

 

结果显而易见,两个列表中同时出现了追加的两个元素,这就表明不能通过简单的“赋值”达到复制列表的效果! 

这么做行不通的解释是:单纯“赋值”,其实还是将两个列表的内容关联到一起,因此这两个列表其实指向的还是同一个列表,所以才出现了两个列表在追加两个不同元素后,两个不同元素同时出现在两个列表里的结果。所以,在使用列表的副本时,还是老老实实的去“切片”。(这里的操作结果,不同于C语言,注意区别。) 

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

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

相关文章

八、Python第八课——元组与列表、代码格式

(请先看置顶博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 目录 一、元组的定义 二、元组的遍历 三、代码格式 一、元组的定义 1、元组:不可变的列表称为元组。这个是相对于普通列表而言的,普通列表…

九、Python第九课——Python中的if语句与运用

(请先看置顶博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 目录 一、if语句 1、检查变量存储的值是否相等 2、判定字母或字符串时区别大小写 3、检查多个条件 4、检查特定值是否在列表中 二、if-else语句和if-elif-el…

十、Python第十课——字典的些许知识(重点)

(请先看置顶博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 目录 (请先看置顶博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 初识字典 1、创建字典 2、字典的“增删改查” …

百度地图API如何申请?(自认为比较详细,如解决了你的问题请收藏、点赞、关注)

(请先看置顶博文)本博打开方式,请详读_liO_Oil的博客-CSDN博客_怎么把androidstudio卸载干净 注意:自己申请的AK要保存好,最好不要外借,避免不必要的麻烦!(写在前面) 目…

PythonPyqt5项目开发完成后如何使用pyinstaller打包——以Pycharm编辑器为例(目前为止最正确的版本,成功打包日期为2020.11.26)

(请先看置顶博文)本博打开方式,请详读_liO_Oil的博客-CSDN博客_怎么把androidstudio卸载干净 最近用Python开发了一个可视化界面,开发过程如鱼得水,几乎没有BUG出现(项目简单)。但是在临近交付时…

十一、Python第十一课——用户输入和另一种循环(While)

(请先看置顶博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 学了这么久的Python,大家肯定会好奇,不是说机器学习吗?不是人机交互吗?不是人工智能吗?怎么我学了Python都十…

如何让新创建的Python文件自动生成作者信息等内容(以Pycharm为例)

(请先看置顶博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 打开Pycharm软件后,点击“File”,然后点击“Settings”,就会出现下面截图界面:然后按照箭头所指,在对应位置…

如何将谷歌浏览器的背景色(包括显示的网站界面等)全部调为黑色?2020.12.28

(请先看置顶博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 因为电脑显示器正对窗户的原因,平时为了透气通风不能使用遮光帘,所以我将整个电脑的所有软件的主题色设为黑色,这样能降低一些光的…

Windows 10如何消除文件夹右上角的“相对箭头”?

(请先看置顶博文)本博打开方式!!!请详读!!!请详读!!!请详读!!!_Cat-CSDN博客 整理笔记本电脑时发现&#xff0…

目标检测第1步:如何在Windows 10下安装MiniConda?

(请先看置顶博文)本博打开方式!!!请详读!!!请详读!!!请详读!!!_Cat-CSDN博客 目录 一、Conda是什么&#xff…

十二、Python第十二课——函数

(请先看置顶博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 目录 (请先看置顶博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 目录 目录 (请先看置顶博文&#xff…

目标检测第2步:如何在Windows 10下安装Anaconda?

(请先看置顶博文)本博打开方式!!!请详读!!!请详读!!!请详读!!!_Cat-CSDN博客 想要学习目标检测的朋友可能会发…

目标检测第3步:如何在Windows 10系统下安装CUDA(更新时间2022.03.22)

(请先看置顶博文)本博打开方式!!!请详读!!!请详读!!!请详读!!!_Cat-CSDN博客 目录 一、自检 1、查看PC是否…

目标检测第5步:如何在Windows 10系统下,搭建YOLOv5(5.0)环境?保姆级,没有人比这个更详细了(更新时间2022.3.22)

(请先看置顶博文)本博打开方式!!!请详读!!!请详读!!!请详读!!!_Cat-CSDN博客 目录 一、安装Anaconda或Minic…

如何将Word与Endnote再次相互关联?

(请先看置顶博文)本博打开方式!!!请详读!!!请详读!!!请详读!!!_Cat-CSDN博客 Endnote是每一个科研人员都接触…

十三、Python第十三课——类(包含对类的相关概念的理解,这一文的附录让你彻底明白类和对象)

(请先看置顶博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 目录 (请先看置顶博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 一、类和对象 1、类 2、对象 二、类的创建和实例…

十四、Python第十四课——文件和异常

(请先看这篇文章:https://blog.csdn.net/GenuineMonster/article/details/104495419) 如果看完这篇博文,你的问题还是没有解决,那么请关注我的公众号,后台发消息给我吧,当天回复&#x…

目标检测第6步:YOLOv5(5.0)如何在Colab中训练自定义数据集?(更新时间:2022.3.22)

(请先看这篇文章:本博打开方式!!!请详读!!!请详读!!!请详读!!!_Cat-CSDN博客) 如果看完这…

十五、Python第十五课——测试代码

(请先看这篇文章:https://blog.csdn.net/GenuineMonster/article/details/104495419) 也许你听过软件测试?编写函数或类时,可以为其编写对应的测试代码。通过测试,可检验代码是否能够按照编写意图工作。在…

Windows 10环境下如何安装CMake?(更新时间:2021.9.13)

(请先看这篇文章:本博打开方式!!!请详读!!!请详读!!!请详读!!!_Cat-CSDN博客) 1、下载Cmake 下…