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 = 0
  codes = code_ranks[-3:].count(name)
  chines = chinese_ranks[-3:].count(name)
  maths = math_ranks[-3:].count(name)

# 也可写为:
  # index = codes + chines + maths
  
  if codes > 0:
    index = index + 1
    
  if chines > 0:
    index = index + 1
    
  if maths > 0:
    index = index + 1
  return index

print('贾宝玉排在倒数三名的次数是', 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('对') * 10

score = left + right
print('贾宝玉的分数是' + str(score) + '分')

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

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

相关文章

k8s自定义资源你会创建吗

创建自定义资源定义 CustomResourceDefinition 当你创建新的 CustomResourceDefinition(CRD)时,Kubernetes API 服务器会为你所 指定的每一个版本生成一个 RESTful 的 资源路径。CRD 可以是名字空间作用域的,也可以是集群作用域的…

短剧系统源码:构建互动娱乐的新平台

随着数字媒体的兴起,短剧成为了一种新兴的娱乐形式,它以紧凑的叙事和快速的节奏迎合了现代观众的观看习惯。短剧系统源码的开发,为短剧内容的创作、传播和消费提供了一个全面的技术解决方案。本文将探讨短剧系统源码的关键组成部分及其功能。…

如何让 LightRoom 每次导入照片后不自动弹出 SD 卡 LR

如何让 LightRoom 每次导入照片后不自动弹出 SD 卡 LR 在导入窗口左上角有个选项: 导入后弹出 把这个去掉就可以了

FreeRTOS同步互斥与通信

本章简介: 本章是概述性的内容。可以把多任务系统当做一个团队,里面的每一个任务就相当于团队里的一个人。团队成员之间要协调工作进度(同步)、争用会议室(互斥)、沟通(通信)。多任务系统中所涉及的概念,都可以在现实生活中找到例子。 各类RT…

Transformer从0到1的学习【还有2-10,别想太多】

1.高纬度介绍Transformer 1.分为编码Encoders和解码器Decoders:“我爱你”作为编码器Encoders的输入进行编码得到序列码后,作为解码器的输入得到输出即为,“I Love you”。 2.编码器和译码器的具体拆分: 左边的编码器Encoders的…

(函数)判断一句话中最长的单词(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>//声明函数&#xff1b; int aiphabetic(char); int longest(char[]);int main() {//初始化变量值&#xff1b;int i;char line[100] { 0 };//获取用户输入字符…

每天写两道(五)合并两个有序链表、最长回文子串

21.合并两个有序链表 . - 力扣&#xff08;LeetCode&#xff09; 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4] (1)迭代法…

牛客网刷题 | BC105 菱形图案

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 描述 KiKi学习了循环&am…

VMware Workstation中WinXP联网问题

我一直以为我的虚拟机上的XP没有联网 因为 蒙了半天&#xff0c;发现是因为这个网址打不开&#xff0c;不是没有网 太傻了 不如在cmd命令行中通过ping baidu.com来判断是否联网

Vue插槽与作用域插槽

title: Vue插槽与作用域插槽 date: 2024/6/1 下午9:07:52 updated: 2024/6/1 下午9:07:52 categories: 前端开发 tags:VueSlotScopeSlot组件通信Vue2/3插槽作用域API动态插槽插槽优化 第1章&#xff1a;插槽的概念与原理 插槽的定义 在Vue.js中&#xff0c;插槽&#xff08;…

【多目标跟踪】《FlowMOT: 3D Multi-Object Tracking by Scene Flow Association》论文阅读笔记

0.论文 论文地址链接:https://arxiv.org/pdf/2012.07541v1 通过流的方式跟踪是一个比较新颖的点,所以这里比较关注运动跟踪,是如果做到流的跟踪来预测目标的位置以及ID绑定的。 FlowMOT的框架结构如下所示,本中会主要关注下运动跟踪、数据关联、ID分配、新生/消亡…

cmd窗口输出内容乱码问题

出现这样的问题是因为编码格式和解码格式不一样导致的&#xff0c;cmd窗口的默认解码格式为GBK&#xff0c;如想修改cmd默认编码格式可以按照下面步骤操作&#xff1a;打开cmd窗口输入&#xff1a;chcp 65001 65001指的是utf-8编码如果不清楚编码对应的 页面编码是是多少&#…

基于51单片机和NRF24L01的无线温度监控设计

一、设计功能 由单片机、温度传感器、无线模块NRF24L01以及液晶显示器等构成高精度远 程无线温度监测系统。 温度显示精确到小数点后一位。 按键设定过温值&#xff0c;过温在液晶屏提示。 系统设计 三、器件选择3.1温度信号采集模块 传统的温度检测大多以热敏电阻为传感器&a…

4K高刷显示器 - 蚂蚁电竞ANT27VU

可以毫不夸张地说&#xff0c;每一局游戏最终能够取得胜利&#xff0c;实际上都与一套极为优秀的电竞 PC 有着紧密的关联&#xff0c;因为其能够提供强大的性能支持与流畅的体验。同样的道理&#xff0c;一套优秀的电竞 PC 若想发挥出最佳的效果&#xff0c;那也都离不开一台能…

14.Ollydbg的基本使用

上一个内容&#xff1a;13.优化界面化的游戏辅助 Ollydbg是一个调试工具&#xff0c;它可以一步一步的运行一个程序并且还能很直观的看到被调试程序的寄存器状态、栈状态。Ollydbg需要以管理员方式运行&#xff01; 下图附加程序是调试一个正在运行的进程&#xff1a; 点击了…

适合学生写作业的台灯有哪些?台灯怎么选详细攻略!

在数字化飞速发展的今天&#xff0c;孩子们的学习和生活越来越离不开电子屏幕。然而&#xff0c;长时间盯着屏幕&#xff0c;不仅容易让眼睛感到疲劳&#xff0c;更是近视问题日益严重的元凶之一。每一位家长都希望孩子能拥有健康的视力&#xff0c;因此会为孩子挑选一台护眼灯…

【UML用户指南】-04-从代码到UML的关键抽象

1、关键抽象 声明了一个名为paint的操作&#xff0c;它的实现调用名为drawString的另一个操作&#xff0c;drawString操作负责在指定的位置上打印“Hello,World!”。在通常的面向对象的方式下&#xff0c;drawString是一个名称为g的参数上的一个操作&#xff0c;g的类型是类Gr…

写字静不下心?不如试试这些“笨方法”

夏天悄悄热起来啦&#xff5e;有人说&#xff0c;想踏踏实实写一会儿&#xff0c;但又静不下心&#xff0c;耐不住性子&#xff0c;快收下这四个小锦囊&#xff0c;与古人一起笨拙精进吧&#xff01;    1、不论输赢      每次课前&#xff0c;暄桐林曦老师总会强调&am…

VS(visual studio)搭建QT开发环境插件安装

优先安装QT Qt6 官网QtCreator 下载与安装方法win10_qt6下载-CSDN博客 如果安装vs2019,打开installer,安装c环境 选择c 下载vsix后&#xff0c;双击安装即可。 插件下载&#xff1a; Index of /qtproject/official_releases/vsaddin/ 创建QT项目&#xff1a; 创建完成&…

教你搞一个比较简单的计时和进度条装饰器

教你搞一个比较简单的计时和进度条装饰器 什么是装饰器为啥要用装饰器呢&#xff1f;上代码&#xff01;如何使用装饰器效果 什么是装饰器 装饰器的英文是&#xff1a;Decorator。装修的英文是&#xff1a;Decoration。顾名思义就是我们要用装饰器在函数func()上搞点儿事儿&am…