目录

一、切片

二、遍历切片

三、列表的复制

一、切片

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

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

  1. Python学习记录 基于《Python编程 从入门到实践》 Python基础 Python第三课 操作列表

    遍历整个列表(循环) for循环 把名字循环打印出来 把列表赋值给变量name 把name中的每个元素赋值给变量a 循环打印a. 主要for循环后的冒号不要丢了,否则会报错. name=['张三',' ...

  2. Python第五课:列表和字典

    一.列表 1. 什么是列表 一个列表需要使用中括号[]将所有数据框起来,里面中的每一个数据叫做"元素", 元素与元素之间使用逗号隔开. list=['李雷','韩梅梅',180,3 ...

  3. Python数据分析实战-将一维列表和二维列表内容保存到本地excel文件(附源码和实现效果)

    前面我介绍了可视化的一些方法以及机器学习在预测方面的应用,分为分类问题(预测值是离散型)和回归问题(预测值是连续型).同时做了关于图像识别的系列文章,让读者理解python进行图像识别的过程.原理和方 ...

  4. Python第三课:列表,元组,集合

    原码Gitee:https://gitee.com/xu-wen-jie/python.git 原码Github:https://github.com/miracleboys/Python.git 文 ...

  5. 要关闭python解释器可使用函数或者快捷键_超星尔雅中华传统文化之戏曲瑰宝第七章节测验网课答案选修课慕课答案...

    超星尔雅中华传统文化之戏曲瑰宝第七章节测验网课答案选修课慕课答案 更多相关问题 [多选题]2018年6月初,某企业无形资产账面价值为1 000万元,采用直线法摊销.6月份发生相关业务如下: (1)1日 ...

  6. 孤荷凌寒自学python第七十九天开始写Python的第一个爬虫9并使用pydocx模块将结果写入word文档...

    孤荷凌寒自学python第七十九天开始写Python的第一个爬虫9 (完整学习过程屏幕记录视频地址在文末) 今天在上一天的基础上继续完成对我的第一个代码程序的书写. 到今天终于完成了对docx模块针对 ...

  7. python(七)爬虫框架

    python(七)爬虫框架 常见的爬虫框架 Scrapy框架:Scrapy框架是一套比较成熟的Python爬虫框架,是使用Python开发快速,高层次的信息爬取框架,可以高效的爬取web页面并提取出结 ...

  8. Python第七次作业

    Python第七次作业 参考书目:<Python编程从入门到实践> 2018/03/29 8-1.消息 :编写一个名为display_message()的函数,它打印一个句子,指出你在本章 ...

  9. python 第七周

    python 第七周 6-1 写函数求满足要求三位数的个数 Author 王祥荣 Organization 宁波财经学院 要求实现一个函数,统计给定区间内的三位数中至少有两位数字相同的完全平方数(如1 ...

最新文章

  1. MATLAB【九】————ICP算法实现
  2. 使用ffmpeg实现转码样例(代码实现)
  3. 漫画算法:找出缺失的整数
  4. leetcode718 最长重复子数组
  5. 基础编程题目集 7-1 厘米换算英尺英寸 (15 分)
  6. vue v-for循环动态获取_快速、简洁讲明Vue中vfor循环key的作用
  7. ROS推荐链接:UNIX/LINUX专为初学者的教程和命令 http://www.ee.surrey.ac.uk/Teaching/Unix/
  8. 打包windows 和 linux caffe 版本的人脸识别 人脸年龄估计 人脸性别模型的总结
  9. 计算机网络防护,计算机网络防护方法与流程
  10. 小米线刷 mysql_小米6刷机(线刷)第三方ROM——LineageOS
  11. VS2013官方下载地址
  12. 串口通信pyserial
  13. 蓝桥杯算法题--跑步锻炼(java实现)
  14. skiller v3 beta2 发布
  15. 重磅!微信二维码引擎OpenCV开源!3行代码让你拥有微信扫码能力
  16. 2018浙大408考研经验(划掉)个人口胡 普通一本+二战(伪)+小跨吧大概
  17. Oracle Databasae wallet使用指南
  18. 基址寻址和变址寻址的不同
  19. 创建 DBLink 的方法
  20. 计算机主板维修高手,计算机电路基础与维修高手

热门文章

  1. sizeof是c语言的一种运算符,深入sizeof的使用详解
  2. linux使用ping命令ping本机,Linux下使用ping命令判断网络的好坏
  3. 解决删除镜像时image is referenced in multiple repositories
  4. ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
  5. 小程序开发(4)-之登录
  6. python3-numpy数组切片和索引
  7. 2017计算机等级考试试题,2017年计算机二级考试练习题及答案
  8. 发动机压缩比怎么计算公式_怎么判断发动机有积碳,发动机积碳多的症状有哪些...
  9. 计算机组成原理第八章课后答案6,计算机组成原理 第八章 复习
  10. qt中使用QStringLiteral宏来实现带参数的输出