python列表的进阶

小结:

# 列表的删除小结:
# 删除列表的最后一列
punished = students.pop()
print('被罚站的人是:' + punished + ',同学们引以为戒。')# 根据下标删除
del students[0]#根据名称删除
students.remove('王熙凤')

在今天的课程里,我们会继续学习更多的列表操作方法,准备好了吗?

在上一关中我们说过,数据的“变动”方式有三种,分别是“添加”、“修改”和“删除”,我们已经学了“添加”和“修改”的基本操作,下面我就来讲讲列表元素的“删除”。

列表元素的删除

你在大观园的课堂上,已经有了 14 位学生,你将他们的名字储存在了 students 这个列表里。

students = ['林黛玉', '薛宝钗', '贾元春', '贾探春', '史湘云', '妙玉', '贾迎春','贾惜春', '王熙凤', '贾琏', '贾巧姐', '李纨', '秦可卿', '贾宝玉'
]

同学们和往常一样,课下说说笑笑,课上认真学习你教的知识,但唯一有点不一样的地方,是宝玉最近好像有些心不在焉。

原来他和林妹妹闹了点小矛盾,因而心情低落,上课也不好好听了。你在讲台上说得酣畅淋漓,他却在课桌上神游太虚,这让你甚为火大,于是你打算让宝玉罚站,并让他下节课不准来上课。

这样,下一节课的花名册要修改了,

首先记录罚站的人,再把这个人名字删除。Python 的列表就支持这种操作,我们可以用列表的 pop() 方法实现。

pop() 的功能是:返回列表指定位置的元素,并删除这个元素。 pop() 可以传入一个参数,表示要删除的元素的索引,如果不传入,就默认为最后一个元素的索引

宝玉恰好是名单上的最后一个名字,所以我们可以这样操作:

# 去除最后一个
students.pop()# 下面来验证操作过后的名单
print(len(students))  # len() 函数用于获取序列的元素个数
# 输出:13

“pop”作为英文单词,除了我们熟悉的“流行”的意思,还能表示“气泡冒出水面”。我们想象一下水中的气泡冒出水面的样子:气泡一个个离开水下的位置,冒到水面让大家看到。

当然,我们可以定义一个变量来捕获这个冒出的“气泡”,进行下一步操作。比如,你不想光打印出宝玉的名字,还要加工成完整的语句通知大家。这时候就可以定义变量 punished ,用来捕获 pop() 方法返回并删除的元素后再进行操作。下面我们重新来操作惩罚宝玉前的 14 人花名册:

punished = students.pop()
print('被罚站的人是:' + punished + ',同学们引以为戒。')
# 输出:被罚站的人是:贾宝玉,同学们引以为戒。

通知发完了,宝玉找到你向你道歉,说接受惩罚,不该因为个人私事而影响学习。你也原谅了宝玉,希望他下次不要再犯啦。你也希望下一节课,students 列表中的剩下的 13 个人都能认真听讲,不要像宝玉一样开小差。

这时黛玉来找老师您请假,她气色不佳,说话有气无力,原来是染了风寒,下一节课也不能来了。你让黛玉好好回去休息,然后还得再删除一个名字。不过这次,就不用把名字公示出来了。那么我们可以使用更加便捷的 del 语句来操作列表,格式为:del 列表[索引]

“del”是单词 “delete”(删除)的缩写。del 列表[索引] 意思就是“删除列表中指定索引的元素”。这里正向和反向索引都是支持的。

我们知道黛玉是列表的第一个元素,那么操作方法如下:

# 黛玉索引为 0
del students[0]# 验证一下是否成功
print(len(students))
# 输出:12

这样,我们就在名单上成功删除了黛玉的名字。

我们来捋一捋上面删除操作的逻辑:首先找到这个元素(通过元素索引),再删除这个找到的元素。

说到这里,同学们有没有联想到上一关的内容——元素的查找?列表中的元素可以通过索引查找,也可以通过值来查找。刚刚介绍的是通过索引找到元素再删除,那么可不可以通过值来找到元素再删除呢?

答案是肯定的。下面我们就来介绍 remove() 方法。通过 列表.remove(值) 的方式,我们可以在列表中找到 第一个 指定的值,然后将它删除。

这不,王熙凤也来找老师您请假了,要去打点大观园府里的事务,有些忙,下节课也不能来了。这次的删除操作,我们就试试不用索引,不去数王熙凤在列表里的位置,而是用刚刚说的 remove() 直接通过姓名来删除:

students.remove('王熙凤')# 验证一下是否成功
print(len(students))
# 输出:11

练习:

大观园这样的钟鸣鼎食之家,膳食品种丰富,名目繁多,就连零食也是琳琅满目。林妹妹这几天的风寒还没痊愈,宝玉也是心急,便想着给林妹妹送点儿好吃的。他走进膳房,见着其中正摆着这几种食物:

玫瑰膏、新栗粉糕、鸡油卷、燕窝、烤鹿肉和木樨清露。

宝玉心想,好吃的虽多,但有的还是太油了,林妹妹现在的身子怕是吃不得,还是去掉几样,再送给她吧。于是他决定将食物中的 鸡油卷 和 烤鹿肉 去掉。

来帮帮宝玉,补全代码,将 food 的这两样食物删掉吧~

要求:

  1. 用 del 语句和 remove 方法分别删除 鸡油卷 和 烤鹿肉
  2. 打印出去掉上面两种食物后的食物清单。
food = ['玫瑰膏', '新栗粉糕', '鸡油卷', '燕窝', '烤鹿肉', '木樨清露']# 用 del 语句去掉鸡油卷
del food[2]# 用 remove() 方法去掉烤鹿肉
food.remove('烤鹿肉')# 打印出去掉上面两种食物后的食物清单
print(food)

黛玉见宝玉对她嘘寒问暖,还送来自己爱吃的零食,心里的气消了一大半,身体也渐渐好了,没过几天,宝玉和黛玉又愉快地一块玩耍了。我们要为他们俩的和好俩鼓鼓掌~

当然,我们更要为坚持到现在的你也鼓鼓掌!列表的基本操作,“增删改查”,你都已经基本掌握了,相信在你手中,列表可以发挥出它的强大力量!

下面我们要说的知识是列表的高级操作——分片,会让你见识到 Python 这门语言的优雅。一起来继续你的大观园教学之旅吧。

分片

成绩排名列表

midterm_rank = ['妙玉', '薛宝钗', '贾元春', '王熙凤', '林黛玉', '贾巧姐', '史湘云','贾迎春', '贾宝玉', '李纨', '贾探春', '秦可卿', '贾惜春', '贾琏'
]

看到成绩,作为老师的你,要将学生分成三批来分别谈话:

  • 排名前三的,公开表扬;
  • 排名中游,即第四到第十,适当表扬,鼓励为主;
  • 排名靠后,即最后四名,找出问题,适当批评。

我们要怎么找到这三批学生呢?这时就要用到列表的 分片 功能,来获取列表在某个范围内的元素。

列表分片用一对以冒号分隔的索引位置表示,格式为 列表[起始索引:结束索引]。比如要获取 students 中第三到第五个元素,也就是索引为 234 的元素,就要写成 students[2:5]

要特别注意,不是 students[2:4]!在这里很多同学会迷惑,老师为什么要多此一举,把范围末尾的元素索引往后挪一位呢?

Python 语言在此如此设计,其实是考虑到我们日常数数的一个漏洞,所以有意而为之。

问大家一个问题:从 77 数到到 85,一共要数多少个数字?

有的同学可能会直接两数相减,85 - 77 = 8,所以是 8 个数!

真的吗?仔细数数,其实正确算法是 85 - 77 + 1 = 9。

说完了分片的语法,你就要开始用分片分出三批学生啦。

首先找到排名前三的,也就是索引为 012 的元素。

print(midterm_rank[0:3])
# 输出:['妙玉', '薛宝钗', '贾元春']对于从头开始的分片,Python 支持更加简便的写法,省去开始的 0。所以,这样写也是可以的:print(midterm_rank[:3])
# 输出:['妙玉', '薛宝钗', '贾元春']

接下来我们来找出排在中游,排名第四到第十的七名同学,他们的起始索引是 3,结束索引是 3+7=10

print(midterm_rank[3:10])
# 输出:['王熙凤', '林黛玉', '贾巧姐', '史湘云', '贾迎春', '贾宝玉', '李纨']

操作成功!原来还担心宝玉那段时间心不在焉,成绩会垫底,但是没有,看来后面还是下了一番功夫的。

最后,我们要找出排名靠后的四个学生啦,他们的索引是 10 到 13。和从列表起始处开始的分片一样,这种截取最后几个元素的分片可以简写成 list[start:] 的形式:

print(midterm_rank[10:])
# 输出:['贾探春', '秦可卿', '贾惜春', '贾琏']

这样我们就找出了这三批学生,轮到老师你和他们分别谈话,表示表扬和鼓励啦。

练习:

你正在安排大观园班下一周的值日表,一周七天每天都要有一个同学负责班里的卫生。你将他们的值日排班按周一到周日的顺序写进了列表 on_duty 中。

试着用将下面的代码补全,用分片的方式查询:

  1. 周一和周二分别是谁值日;
  2. 周三到周五是谁值日;
  3. 周末两天是谁值日。

on_duty = ['贾琏', '王熙凤', '林黛玉', '贾宝玉', '李纨', '薛宝钗', '妙玉']# 打印周一周二值日的人
print(on_duty[:2])# 打印周三到周五值日的人
print(on_duty[2:5])# 打印周末值日的人
print(on_duty[5:])

列表常用方法

我们对列表的操作,还有统计、排序、反转、复制、清空等。

老师给你整理了一些常用方法,可以把图片保存下来,再根据需要查找相应的方法。

统计元素出现的次数

count() 方法可以统计元素在列表中出现的次数,使用起来很简单:

students = ['林黛玉', '贾宝玉', '薛宝钗', '贾宝玉']
print(students.count('贾宝玉'))
# 输出:2

排序

sort() 是一个很强大的方法,可以对列表内的元素进行排序,直接调用 students.sort() 后,Python 会使用默认的排序方法对其排序。不同数据类型的排序方法不一样,我们来看看对字符串列表和数值列表进行排序的不同:

str_list = ["lin", "jia", "xue"]
str_list.sort()
print(str_list)
# 输出:['jia', 'lin', 'xue']num_list = [4, 2, 1, 9]
num_list.sort()
print(num_list)
# 输出:[1, 2, 4, 9]

反转、复制和清空

剩下的 reverse()copy()clear() 方法比较简单,我们直接看代码和运行结果来认识它们:

# reverse() 方法:将列表顺序反转
students = ["林黛玉", "贾宝玉", "薛宝钗"]
students.reverse()
print(students)
# 输出:['薛宝钗', '贾宝玉', '林黛玉']# copy() 方法:复制一个同样的列表
students1 = ["林黛玉", "贾宝玉", "薛宝钗"]
students2 = students1.copy()
print(students2)
# 输出:['林黛玉', '贾宝玉', '薛宝钗']# clear() 方法:清空列表
students = ["林黛玉", "贾宝玉", "薛宝钗"]
students.clear()
print(students)
# 输出:[]

reverse() 方法在需要倒序输出列表内容时很实用。而 copy() 和 clear() 方法你可能比较困惑,直接将 students2 = students1 不就复制了同样的列表,直接 students = [] 不就清空了列表了吗?为什么还要 copy() 和 clear() 方法。我直接用代码给你解释吧!

students1 = ["林黛玉", "贾宝玉", "薛宝钗"]
students2 = students1
students1[0] = '袭人'
print(students2)
# 输出:['袭人', '贾宝玉', '薛宝钗']

可以看到,我们明明只改了列表 students1 的元素,students2 却也跟着变了!所以,我们可以知道,students2 = students1 并不是复制一个列表,而是给原先的列表一个新的称号 students2

练习:

你将 14 名学生的在上一节中的期中考试成绩放入了名为 scores 的列表中,不过还没有进行排序。

现在,你需要统计这次考试成绩的极差(最高分与最低分的差值),以及有多少人考了满分 100 分。

来完善代码,算出上面需要的两个值吧~

scores = [100, 92, 77, 85, 81, 90, 100, 86, 79, 93, 91, 96, 75, 84]# 对 scores 进行排序
scores.sort()
# 计算这次考试成绩的极差
result = scores[-1] - scores[0]
print(result)# 统计考100分的人数
print(scores.count(100))

本章回顾

在今天的 列表进阶 课程中,我们学习了列表元素的删除,用 pop() 返回并删除指定位置的元素,用 del 语句通过索引删除元素,用 remove() 方法通过具体的值删除元素。

我们学习了列表的重要操作 分片,用 列表[起始索引:结束索引] 的格式感受 Python 的优雅。

在 列表常用方法 一节,老师向大家介绍了几种实用的列表方法,同学们可以借助课程中的举例理解内化,或者拿小本本记下来,在编写代码时灵活取用。

本章练习

练习一:

刚刚听班主任讲她看到几门考试的倒数三名里都有贾宝玉和秦可卿,我们来统计贾宝玉和秦可卿他们到底在几门课里是倒数前三呢?

要求: 在屏幕上分别打印出:

贾宝玉排在倒数三名的次数是 xxx

秦可卿排在倒数三名的次数是 xxx

注意:要将 xxx 替换为计算的结果哦~

code_ranks = ['贾惜春', '贾巧姐', '李纨','秦可卿', '史湘云', '王熙凤','薛宝钗', '林黛玉', '妙玉','贾迎春', '贾宝玉', '探春'
]
chinese_ranks = ['林黛玉', '薛宝钗', '贾宝玉','贾探春', '史湘云', '贾迎春','贾惜春', '王熙凤', '贾巧姐','李纨', '妙玉', '秦可卿'
]
math_ranks = ['王熙凤', '贾迎春', '妙玉','林黛玉', '贾惜春', '贾巧姐','贾探春', '史湘云', '秦可卿','李纨', '薛宝钗', '贾宝玉'
]# 定义函数,计算某个学生出现在倒数三名的总次数
def last_three(name):index = 0codes = code_ranks[-3:].count(name)chines = chinese_ranks[-3:].count(name)maths = math_ranks[-3:].count(name)# 也可写为:# index = codes + chines + mathsif codes > 0:index = index + 1if chines > 0:index = index + 1if maths > 0:index = index + 1return indexprint('贾宝玉排在倒数三名的次数是', last_three('贾宝玉'))
print('秦可卿排在倒数三名的次数是', last_three('秦可卿'))

练习二:

歌手大赛

学校组织了歌手大赛,8 名评委对每位歌手进行打分,去掉一个最高分和一个最低分,剩下 6 名评委的分数的平均数就是歌手的最终成绩。贾宝玉也来参加歌手大赛了,你能帮他算出他的最终得分 average_score 吗?

我们可以按照下面的步骤来完成程序:

  1. 对分数进行排序;
  2. 去掉最高分和最低分;
  3. 对剩下的分数求和,然后算出平均分并将其打印出来。

拓展:你可以通过索引将列表的每个元素相加求和,但 Python 中有更简便的方式——sum() 函数。将需要求和的列表传入 sum() 函数即可得到列表中所有元素相加后的值。

scores = [92.1, 93.6, 88.2, 91.2, 85.7, 94.5, 95.1, 90.6]scores.sort()del scores[0]
del scores[-1]average_score = sum(scores) / len(scores)
# print(sum)# 打印最后的平均分
print(average_score)

编程期中考试,大观园的编程老师出了 10 道题给大家。贾宝玉的试卷已经改完了,你能帮老师算出贾宝玉考了多少分吗?

计分规则为:前 5 题每道题 5 分,后 5 题每道题 10 分。

data = ['对', '错', '错', '对', '错', '对', '对', '对', '错', '对']left = data[:5].count('对') * 5
right = data[5:].count('对') * 10score = left + right
print('贾宝玉的分数是' + str(score) + '分')

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

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

相关文章

绿联 安装SeaTable在线协同表格

绿联 安装SeaTable在线协同表格 1、镜像 seatable/seatable-developer:latest 2、安装 2.1、基础设置 重启策略:容器退出时总是重启容器。 2.2、网络 网络选择桥接(bridge)。 2.3、存储空间 装载路径/shared不可变更。 2.4、端口设置 容器端口固定80&#x…

Unity动画系统介绍

Unity动画系统介绍 Animator组件: 这是Unity中用于控制动画状态的组件,它与Animator Controller一起工作,可以基于游戏逻辑来切换不同的动画状态。 Animator Controller: 这是一个用于管理动画状态机的组件,它允许…

Leetcode:回文数

题目链接&#xff1a;9. 回文数 - 力扣&#xff08;LeetCode&#xff09; 普通版本&#xff08;字符串双指针&#xff09; 1、x为负数时永远不可能为回文数 2、x为个位数时不可能是回文数 class Solution { public:bool isPalindrome(int x) {if(x<0||(x%100 &&…

音视频开发—V4L2介绍,FFmpeg 打开摄像头输出yuv文件

实验平台&#xff1a;Ubuntu20.04 摄像头&#xff1a;1080P 监控摄像头&#xff0c;采用V4L2驱动框架 文章目录 1.V4L2相关介绍1.1. 基本概念1.2. 主要功能1.3. V4L2驱动框架1.4. 主要组件1.5. 使用V4L2的应用1.6. 常用V4L2工具 2.ffmpeg命令实现打开摄像头输出yuv文件3.使用C…

ssm整合(spring+springmvc+mybatis)做一个小项目(SpringMVC学习笔记六)

一、mybatis层 1、搭建数据库&#xff1a; //创建数据库 CREATE DATABASE ssmbuild; //选择数据库 USE ssmbuild//检查如果数据库中有books这个表的话就给他删除 DROP TABLE IF EXISTS books//创建表books CREATE TABLE books( bookID INT(10) NOT NULL AUTO_INCREMENT COMME…

二叉树链式结构的实现

1.创建二叉树 (1)创建结构体 typedef int BTDataType;typedef struct BinaryTreeNode {BTDataType _data;struct BinaryTreeNode* _left;struct BinaryTreeNode* _right; }BTNode;(2)根据前序遍历构建树 //通过前序遍历的数组"123##45##6##"构建二叉树 BTNode* Bi…

docker以挂载目录启动容器报错问题的解决

拉取镜像&#xff1a; docker pull elasticsearch:7.4.2 docker pull kibana:7.4.2 创建实例&#xff1a; mkdir -p /mydata/elasticsearch/configmkdir -p /mydata/elasticsearch/dataecho "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasti…

vs2019 c++20 规范 STL库中关于时间的模板 ratio<T,U> , duration<T,U> , time_point<T,U>等

(探讨一)在学习线程的时候&#xff0c;一些函数会让线程等待或睡眠一段时间。函数形参是时间单位&#xff0c;那么在 c 中是如何记录和表示时间的呢&#xff1f;以下给出模板简图&#xff1a; &#xff08;2 探讨二&#xff09;接着给出对模板类 duration_values 的成员函数的测…

【Leetcode 705 】设计哈希集合——数组嵌套链表(限制哈希Key)

题目 不使用任何内建的哈希表库设计一个哈希集合&#xff08;HashSet&#xff09;。 实现 MyHashSet 类&#xff1a; void add(key) 向哈希集合中插入值 key 。bool contains(key) 返回哈希集合中是否存在这个值 key 。void remove(key) 将给定值 key 从哈希集合中删除。如果…

免费企业域名备案手把手教程

走的阿里云的备案服务&#xff0c;全程免费 前提 主办者&#xff1a;你的企业主办者负责人&#xff1a;当前登录的阿里云账户的人&#xff0c;不是企业法人的话&#xff0c;得准备委托书&#xff0c;会有地方提供模板&#xff0c;打印一下&#xff0c;签字扫描上传就行域名的…

【强化学习】DPO(Direct Preference Optimization)算法学习笔记

【强化学习】DPO&#xff08;Direct Preference Optimization&#xff09;算法学习笔记 RLHF与DPO的关系KL散度Bradley-Terry模型DPO算法流程参考文献 RLHF与DPO的关系 DPO&#xff08;Direct Preference Optimization&#xff09;和RLHF&#xff08;Reinforcement Learning f…

Kaggle线上零售 CRM分析(RFM+BG-NBD+生存分析+PySpark)

数据集地址&#xff1a;数据集地址 我的NoteBook地址&#xff1a;NoteBook地址 这个此在线零售数据集包含2009年12月1日至2011年12月9日期间的在线零售的所有交易。该公司主要销售独特的各种场合礼品。这家公司的许多客户都是批发商。本文将通过pyspark对数据进行导入与预处理&…

思迈特受邀参加工信部等权威机构行业盛会,探讨AI领域前沿技术

近日&#xff0c;思迈特软件作为国产BI领域知名厂商&#xff0c;多次受邀出席行业盛会&#xff0c;与众多业内专家学者、行业精英及知名企业代表等汇聚一堂共襄盛会&#xff0c;探讨行业前沿热点研究及最新趋势&#xff0c;分享企业数字化建设创新成果与成功实践&#xff0c;共…

Spring高手之路19——Spring AOP注解指南

文章目录 1. 背景2. 基于AspectJ注解来实现AOP3. XML实现和注解实现AOP的代码对比4. AOP通知讲解5. AOP时序图 1. 背景 在现代软件开发中&#xff0c;面向切面编程&#xff08;AOP&#xff09;是一种强大的编程范式&#xff0c;允许开发者跨越应用程序的多个部分定义横切关注点…

深度解析:重庆耶非凡科技有限公司的人力rpo项目

在当今竞争激烈的商业环境中&#xff0c;人力资源项目的成功与否往往决定了一个企业的长远发展。重庆耶非凡科技有限公司作为行业内的佼佼者&#xff0c;其人力资源项目备受瞩目。本文将深入探讨该公司的人力资源项目&#xff0c;特别是其独特的选品师项目和人力RPO服务。 首先…

2024年06月在线IDE流行度最新排名

点击查看最新在线IDE流行度最新排名&#xff08;每月更新&#xff09; 2024年06月在线IDE流行度最新排名 TOP 在线IDE排名是通过分析在线ide名称在谷歌上被搜索的频率而创建的 在线IDE被搜索的次数越多&#xff0c;人们就会认为它越受欢迎。原始数据来自谷歌Trends 如果您相…

数字光强测量仪OPT3001

外观 参考价格 原理图 频谱 特性 说明 OPT3001 传感器用于测量可见光的密度。传感器的光 谱响应与人眼的视觉响应紧密匹配&#xff0c;其中具有很高的红 外线阻隔。 OPT3001 是一款可如人眼般测量光强的单芯片照度 计。OPT3001 器件兼具精密的频谱响应和较强的 IR 阻隔功能&a…

基于Weaviate构建多模态检索和多模态检索增强(RAG): Building Multimodal Search and RAG

Building Multimodal Search and RAG 本文是学习 https://www.deeplearning.ai/short-courses/building-multimodal-search-and-rag/ 这门课的学习笔记。 What you’ll learn in this course Learn how to build multimodal search and RAG systems. RAG systems enhance an …

在iPhone上恢复已删除的Safari历史记录的最佳方法

您是否正在寻找恢复 iPhone 上已删除的 Safari 历史记录的最佳方法&#xff1f;好吧&#xff0c;这篇文章提供了 4 种在有/无备份的情况下恢复 iPhone 上已删除的 Safari 历史记录的最佳方法。现在按照分步指南进行操作。 iPhone 上的 Safari 历史记录会被永久删除吗&#xff1…

kafka 发送文件二进制流及使用header发送附属信息

文章目录 背景案例发送方接收方 背景 需要使用kafka发送文件二进制以及附属信息 案例 发送方 import org.apache.kafka.clients.producer.KafkaProducer; import org.apache.kafka.clients.producer.ProducerRecord;import java.io.InputStream; import java.nio.charset.S…